净额和增值税额不等于总额
本文关键字:不等于 增值税 | 更新日期: 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 netAmountBtotal 6705.19 (out by 0.01)
这个例子中的总数是6705.20,它由
组成。wallet = 5353.66
gusset = 1351.54
将两个数四舍五入后相加与将一个和四舍五入得到的结果不同。
这样想:
3.4 + 4.4 = 7.8
如果你把7.8
四舍五入,你会得到8
,但如果你先四舍五入3.4
和4.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);
)