如何在C#中更改小数的精度(使用尾随零保留)

时间:2017-04-04 07:46:50

标签: c# decimal rounding decimal-point

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个数字舍入到decimal 3个强制位置?

由于难以解释,欢迎提出更好标题的建议!

1 个答案:

答案 0 :(得分:2)

您始终可以在结果中添加0.000m

        var x = Math.Round(25.00m, 3);
        var y = 0.000m;
        var z = x + y;

打印z显示它现在有3个小数位。我同意评论这是值得怀疑的。

(注意 - 如果x的当前值足够大以至于无法容纳额外的位置而不改变积分部分,那么仍然不会创建3个小数位)

提问者编辑:要使这个答案可以接受,请在评论中添加此答案(要求提供双重作为来源的问题,这也解决了VS2008的问题):

var z = Math.Round(((decimal) 25d) + 0.000m, 3);

有趣的是,在VS2008中,只有在decimal内进行投射0.000m并添加Math.Round()时才有效。在VS2015中,它也可以在外面完成。如果有人知道对此的解释,请发表评论。