C#舍入双精度不起作用

时间:2018-07-17 11:33:14

标签: c# math rounding

我有这段代码舍入了一些值。我使用Math.Round()来实现相同的功能。

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

结果是128015.99999999999 如果我将其编写为控制台,它将给我128016。我希望该值为128016

我是否缺少任何类型转换?还是有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:8)

128.016不能完全用二进制表示。乘以128016就不可能得到1000

有多种解决方法:

  • 什么都不做。已正确打印。 (除非您要执行进一步的计算。)
  • “显而易见的”解决方案是再次重新
  • “最简单”的解决方案是先相乘,然后四舍五入。
  • 最“正确”的解决方案是,如果需要精确的值,则应使用精确的类型;通过NuGet提供了bignum,有理数,十进制和精确算术的许多实现,也可以考虑使用decimal

答案 1 :(得分:0)

您是否尝试过在不使用任何其他参数的情况下使用round函数?

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