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个强制位置?
由于难以解释,欢迎提出更好标题的建议!
答案 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中,它也可以在外面完成。如果有人知道对此的解释,请发表评论。