C#舍入双重不工作

Shi*_*h11 1 c# math rounding

我有这个代码来绕一些值.我正在使用Math.Round().

double h = 128.015999031067; double d = Math.Round(h, 3) * 1000;

结果是,128015.99999999999 如果我把它写到控制台,它给了我128016.我希望价值128016

我错过了任何类型的转换吗?或者还有其他一些方法可以做到这一点?

Jör*_*tag 8

128.016无法用二进制表示.你不可能128016通过乘以得到1000.

有很多方法可以解决这个问题:

  • 没做什么.它已经正确打印.(除非你想进行进一步的计算.)
  • "明显的"解决方案是简单地再次轮回.
  • "最简单"的解决方案是先乘,然后再绕.
  • 最"正确"的解决方案是,如果你需要精确的值,你应该使用一个确切的类型; 有许多实现bignum,有理,十进制和精确算术可通过NuGet,也可以考虑使用decimal.