【发布时间】:2017-04-04 07:46:50
【问题描述】:
C# 中的decimal 值有一个固定的小数点,因此知道它在创建时有多少个小数位:
25.000m.ToString()
返回 "25.000",不像 double 有一个浮点数。
这个问题不是关于如何显示固定小数的数字,我知道各种字符串转换选项。这是关于decimal数据类型的内部表示,我只是用.ToString()来展示它。
现在我想将一个数字四舍五入为固定的小数位数。这有效:
Math.Round(25.0000m, 3) -> 25.000
但是当小数位数小于 3 时,或者它来自 double,它不会(当然):
Math.Round(25.00m, 3) -> 25.00
Math.Round((decimal) 25.0000d, 3) -> 25
(decimal) Math.Round(25.0000d, 3) -> 25
那么我如何将任何 double 数字四舍五入为具有 3 个强制位置的 decimal?
由于很难解释,欢迎提出更好的标题建议!
【问题讨论】:
-
Decimal 和 Double 都是浮点数,区别在于 Decimal 是 128 位浮点十进制数,而 Double 是 64 位浮点二进制数。如果你想要小数精度使用小数,如果你想要大的自然数使用双精度。
-
在我看来,您应该在将其转换为字符串时选择精度,而不是乱用
Math.Round()。 -
@MatthewWatson 小数具有固有的精度。想要使用它而不是忽略它是合理的。
-
@Rawling 我知道,但它的用途值得怀疑。您可能希望以不同的小数位数显示相同的数字。
标签: c# decimal rounding decimal-point