Math.Round(double,2)返回1个小数

时间:2015-05-13 07:55:32

标签: c# string math decimal string-formatting

为什么此代码返回1 sudo apachectl restart而不是2

region = forms.ChoiceField(default='us')

如果我将其替换为decimal它仍会返回1 p = Math.Round(9431.796, 2);

4 个答案:

答案 0 :(得分:4)

如果将9431.796四舍五入到小数点后两位,您将获得9431.80

数字数据类型不存储实际数字。它们存储数字的表示。 9431.809431.8完全相同,当它们存储在decimaldouble变量中时,它们之间不会有任何区别。

因此,如果您显示9431.80而没有做任何事情以某种方式格式化它,它将显示为9431.8。所以问题在于你理解数字如何以数值数据类型存储。

使用.ToString()创建一个包含一定小数位数的字符串。在这种情况下,您不需要使用Math.Round().ToString()会绕过它:

var p = 9431.796.ToString("0.00");
Console.WriteLine(p);                // 9431.80

答案 1 :(得分:3)

你不能因为9431.80等于9431.8。在这种情况下,我猜你想用特定的格式打印出来,可以这样做:

string p = Math.Round(9431.796, 2).ToString("0.00");

答案 2 :(得分:-1)

Math.Round(9431.796, 2)返回一位小数,因为它将四舍五入为9431.80。显示时,它会消除最后的0,这就是为什么你只看到一个小数 Math.Round(9431.796, 4)肯定会返回9431.796。你能再试一次吗?

答案 3 :(得分:-1)

由于它转到9431.80,它会删除无用的最后一个0。我会用:

int nbDec = 2;
p = Math.Round(9431.796, nbDec );
Console.Out.WriteLine(p.ToString("#,##0." + new string('#',nbDec ));

将显示9,431.80

如果您想要更多或更少的小数,只需更改nbDec值即可。