decimal值在C#中有一个固定的小数点,因此知道它在创建时有多少小数位:
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呢?
因为这是很难解释,建议一个更好的标题是欢迎的!
发布于 2017-04-04 07:58:04
可以始终将0.000m添加到结果中:
var x = Math.Round(25.00m, 3);
var y = 0.000m;
var z = x + y;打印z显示它现在有3位小数点。不过,我同意这样的意见,即这是值得怀疑的。
(NB -如果x的当前值足够大,如果不改变积分部分就无法容纳额外的位置,则仍然不会创建3位小数)。
由发问者编辑:为了使这个答案可以接受,从评论中添加这个问题(这个问题要求双源,这也解决了VS2008的一个问题):
var z = Math.Round(((decimal) 25d) + 0.000m, 3);有趣的是,在VS2008中,只有在decimal和添加0.000m的转换在Math.Round()中完成时,它才能工作。在VS2015中,它也可以在外部完成。如果有人知道对此的解释,请评论。
https://stackoverflow.com/questions/43201233
复制相似问题