这是我想要实现的目标:
如果一个双精度数的小数位数超过3个,我想截断超出第三个小数位数的所有小数位。(不圆)
Eg.: 12.878999 -> 12.878
如果双精度数少于3个小数,则保持不变
Eg.: 125 -> 125 89.24 -> 89.24
我遇到了以下命令:
double example = 12.34567; double output = Math.Round(example, 3);
但是我不想四舍五入。根据上面发布的命令, 12.34567 -> 12.346
12.34567 -> 12.346
我想截断该值,使其变为: 12.345
12.345
双打没有小数位- 它们不是基于十进制数字开头的。您可以得到“截断为三个十进制数字时最接近当前值的双精度数”,但是它仍然不会完全相同。最好使用decimal。
decimal
话虽如此,如果仅是四舍五入发生问题的方式,则可以使用Math.Truncate(value * 1000) / 1000;后者 来 完成您想要的事情。(从声音上,您根本不需要 四舍五入 。)尽管如此,它仍然可能是“狡猾的”,因为结果实际上仍然不会只有三位小数。但是,如果使用十进制值执行相同的操作,则 可以 使用:
Math.Truncate(value * 1000) / 1000;
decimal m = 12.878999m; m = Math.Truncate(m * 1000m) / 1000m; Console.WriteLine(m); // 12.878
编辑:正如LBushkin所指出的,您应该在为 显示 目的而截断(通常可以在格式说明符中完成)与为进一步的计算而截断(在这种情况下,上面的方法应该有效)之间是清楚的。