下面的代码有效,但有时它会超出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
netAmountB 4461.38
总计6705.19(减去0.01)此示例中的总数为6705.20,由
组成wallet = 5353.66
gusset = 1351.54
答案 0 :(得分:2)
舍入两个数字然后添加它们可以产生不同的结果来舍入一个求和的数字。
这样想:
3.4 + 4.4 = 7.8
如果您要对7.8
进行整理,那么您将获得8
,但如果您将3.4
和4.4
首先,那么正在添加3 + 4
并获取7
。
在之后尝试舍入,而不是总结数字:)
答案 1 :(得分:1)
我没有足够的代表点来为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);
替换最后一行)