这就是我想要实现的目标:
如果双精度数的小数位数超过 3 位,我想截断第三位以外的所有小数位。 (不要圆形。)
Eg.: 12.878999 -> 12.878
如果 double 的小数位数少于 3 位,则保持不变
Eg.: 125 -> 125
89.24 -> 89.24
我遇到了这个命令:
double example = 12.34567;
double output = Math.Round(example, 3);
但我不想圆。根据上面发布的命令,12.34567 -> 12.346
我想截断该值,使其变为:12.345
双精度数没有小数位 - 它们不是基于小数位开始的。您可以获得“截断为三位小数时最接近当前值的双精度值”,但它仍然不完全相同。你最好使用decimal
.
话虽如此,如果只是舍入发生的方式有问题,您可以使用Math.Truncate(value * 1000) / 1000;
which may做你想做的事。 (你不想要rounding无论如何,从它的声音来看。)尽管如此,它仍然可能是“狡猾的”,因为结果仍然不会真正只有三位小数。然而,如果你用十进制值做同样的事情,它would work:
decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878
编辑:正如LBushkin指出的,你应该清楚截断display目的(通常可以在格式说明符中完成)和截断以进行进一步计算(在这种情况下,上述应该可以工作)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)