【问题标题】:net and vat amounts not equal to total净额和增值税金额不等于总计
【发布时间】:2015-07-20 08:35:03
【问题描述】:

下面的代码可以工作,但有时它会超出 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

净额A 1126.28

netAmountB 4461.38

总共 6705.19(减去 0.01)

本例中的总数为6705.20,由

钱包 = 5353.66

扣板 = 1351.54

【问题讨论】:

    标签: c#


    【解决方案1】:

    将两个数字四舍五入然后相加可能会产生与四舍五入相加的结果不同的结果。

    这样想:

    3.4 + 4.4 = 7.8
    

    如果你将7.8四舍五入,你会得到8,但如果你将3.44.4四舍五入首先,你将添加3 + 4并得到@ 987654327@.

    你已经对数字求和后尝试四舍五入:)

    【讨论】:

    • 加法时我没有汇总
    • 是的,您是(但不在代码中):) 您将 netAmountA 和 netAmountB 的舍入版本相加,得到 6705.19。不要将这些值四舍五入,将它们加在一起,你会得到什么?
    • 你指的是第一行?如果我删除该行上的 Math.Round 位,那么我将无法使用 /1.2m。很多红色和波浪线
    • 抱歉,我的意思是当您使用您在 netAmountA 和 'netAmountB` 中放置的舍入值手动计算总和时,会出现舍入错误:)
    【解决方案2】:

    我没有足够的代表点数来为 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);

    【讨论】:

    • 现在你应该可以添加 cmets 了 :)
    • 我还没有设法让它工作。也许如果你能用不同的方式解释它。谢谢
    • 好吧,拿出你可靠的旧计算器,将 5353.66 除以 1.2。结果是 4461.3833333333333333333333333333。然后,在您的原始帖子中,出于某种莫名其妙的原因,您决定调用 Math.Round() 要求它在小数点后第二位砍掉所有内容。然后,您也对另一个 netAmount 执行此操作,从而进一步降低准确性。您发布的代码正在自找麻烦。
    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多