Math.Round()十进制不正确的值

时间:2015-03-30 16:09:12

标签: math decimal rounding

我已经护目镜并尝试了很多不同的东西。它们提供的值相同。

WRONG

  • 增值税:£8.33增值税:£1.67总计:£9.99

从右

  • 增值税:£24.99增值税:£5.00总计:£29.99
  • 不含增值税:£70.83增值税:£14.17总计:£85.00
  • 除增值税:16.66英镑增值税:£3.33总计:£19.99

计算增值税的代码

            **VAT = 1.2**

            var totalVat = orderLine.MixPrice - (orderLine.MixPrice / orderLine.VatPerItem);
            var priceMinusVat = orderLine.MixPrice - totalVat;

我尝试了什么

var roundPriceMinusVat = Math.Round(Convert.ToDecimal(priceMinusVat), 2);
var roundTotalVat = Math.Round(Convert.ToDecimal(totalVat), 2);

var roundPriceMinusVat = Math.Round(Convert.ToDecimal(priceMinusVat), 3);
var roundTotalVat = Math.Round(Convert.ToDecimal(totalVat), 3);

var roundPriceMinusVat = Math.Round(Convert.ToDecimal(priceMinusVat), 3, MidpointRounding.AwayFromZero);
var roundTotalVat = Math.Round(Convert.ToDecimal(totalVat), 3, MidpointRounding.AwayFromZero);

我从技术上知道这是正确的,因为这是面向客户的我知道有人会用计算器和电子邮件说“这是错的,它不会加起来”。

我真的不知道该怎么办?

感谢任何帮助。

谢谢,

克莱尔

1 个答案:

答案 0 :(得分:2)

您的问题是真实值是9.99 / 1.2 = 8.325和9.99-(9.99 / 1.2)= 1.665。向上舍入将导致0.005 + 0.005 = 0.01的盈余。计算

首先计算税收,决定向上或向下舍入和舍入税,然后从税收中扣除。