xbo*_*nez 47 c# double truncate
这就是我想要实现的目标:
如果double有超过3个小数位,我想截断第三个以上的任何小数位.(不要圆.)
Eg.: 12.878999 -> 12.878
Run Code Online (Sandbox Code Playgroud)
如果double小于3位小数,则保持不变
Eg.: 125 -> 125
89.24 -> 89.24
Run Code Online (Sandbox Code Playgroud)
我遇到了这个命令:
double example = 12.34567;
double output = Math.Round(example, 3);
Run Code Online (Sandbox Code Playgroud)
但我不想圆.根据上面发布的命令,
12.34567 -> 12.346
我想截断该值,使其变为: 12.345
Jon*_*eet 63
双打没有小数位 - 它们不是以十进制数字开头的.当截断为三位小数时,你可以得到"与当前值最接近的两倍",但它仍然不会完全相同.你最好还是用decimal.
话虽如此,如果只是圆角发生的方式是一个问题,你可以使用Math.Truncate(value * 1000) / 1000;它可以做你想要的.(你根本不需要四舍五入的声音.)尽管如此,它仍然可能是"狡猾的",因为结果仍然不会真正只有三个小数位.但是,如果您使用小数值执行相同的操作,则可以使用:
decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878
Run Code Online (Sandbox Code Playgroud)
编辑:正如LBushkin指出的那样,你应该明确截断显示的目的(通常可以在格式说明符中完成)和截断以进行进一步的计算(在这种情况下,上面应该有效).
Chr*_*tin 41
我无法想到在显示目的之外明确失去精度的原因.在这种情况下,只需使用字符串格式.
double example = 12.34567;
Console.Out.WriteLine(example.ToString("#.000"));
Run Code Online (Sandbox Code Playgroud)
Mer*_*rmi 18
double example = 3.1416789645;
double output = Convert.ToDouble(example.ToString("N3"));
Run Code Online (Sandbox Code Playgroud)
如果截断数字的目的是出于显示原因,那么只需在将double转换为字符串时使用适当的格式.
类似String.Format()和Console.WriteLine()(和其他)的方法允许您限制格式化值的精度位数.
不建议尝试"截断"浮点数 - 在许多情况下,浮点数不具有精确的十进制表示.应用一种方法,比如缩放数字,截断它,然后将其缩小,可以很容易地将值更改为与"截断"值的预期完全不同的值.
如果你需要一个数字的精确十进制表示,你应该使用decimal而不是double或float.
| 归档时间: |
|
| 查看次数: |
121477 次 |
| 最近记录: |