净额和增值税额不等于总额

本文关键字:不等于 增值税 | 更新日期: 2023-09-27 18:03:33

下面的代码可以正常工作,但有时会偏离0.01,如下面的示例

如何确保净值(amountA + amountB)加上增值税将始终等于钱包+扣板的总和

        {
        this.transaction.NetValue = Math.Round(Convert.ToDecimal(wallet) / 1.2m + Convert.ToDecimal(gusset) / 1.2m, 2);  (5587.67)
        netAmountA = Math.Round(Convert.ToDecimal(wallet) / 1.2m, 2);  (1126.28)
        netAmountB = Math.Round(Convert.ToDecimal(gusset) / 1.2m, 2);  (4461.38)
        vatAmount = Convert.ToDecimal(wallet) + Convert.ToDecimal(gusset) - Math.Round(Convert.ToDecimal(wallet) / 1.2m + Convert.ToDecimal(gusset) / 1.2m, 2);
        }

增值税金额为1117.53

netAmountA 1126.28

4461.38 netAmountB

total 6705.19 (out by 0.01)

这个例子中的总数是6705.20,它由

组成。

wallet = 5353.66

gusset = 1351.54

净额和增值税额不等于总额

将两个数四舍五入后相加与将一个和四舍五入得到的结果不同。

这样想:

3.4 + 4.4 = 7.8

如果你把7.8四舍五入,你会得到8,但如果你先四舍五入3.44.4 ,你会加上3 + 4得到7

尝试在之后四舍五入,你已经算出了数字:)

我没有足够的代表点来评论Jane S的回答,但我同意她的观点。

你来的太早了。如果您简化了代码:

decimal wallet = 5353.66m;
decimal gusset = 1351.54m;            
decimal netAmountA = wallet/1.2m;
decimal netAmountB = gusset/1.2m;
decimal vatAmount = wallet + gusset - (wallet/1.2m + gusset/1.2m);
Console.WriteLine(netAmountA + netAmountB + vatAmount);

你会得到一个更好的结果:6705,2000000000000000000000000

(或者将最后一行替换为Console.WriteLine("result: {0:C}", netAmountA + netAmountB + vatAmount);)