一尘不染

限制小数点后两位至3位

c#

这是我想要实现的目标:

如果一个双精度数的小数位数超过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.345


阅读 442

收藏
2020-05-19

共1个答案

一尘不染

双打没有小数位-
它们不是基于十进制数字开头的。您可以得到“截断为三个十进制数字时最接近当前值的双精度数”,但是它仍然不会完全相同。最好使用decimal

话虽如此,如果仅是四舍五入发生问题的方式,则可以使用Math.Truncate(value * 1000) / 1000;后者
完成您想要的事情。(从声音上,您根本不需要 四舍五入
。)尽管如此,它仍然可能是“狡猾的”,因为结果实际上仍然不会只有三位小数。但是,如果使用十进制值执行相同的操作,则 可以 使用:

decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878

编辑:正如LBushkin所指出的,您应该在为 显示
目的而截断(通常可以在格式说明符中完成)与为进一步的计算而截断(在这种情况下,上面的方法应该有效)之间是清楚的。

2020-05-19