Math.Round(double,2) returns 1 位小数
Math.Round(double,2) returns 1 decimal
为什么这段代码 returns 1 decimal
而不是 2
p = Math.Round(9431.796, 2);
如果我用 p = Math.Round(9431.796, 4);
替换它,它仍然 returns 1 decimal
如果将 9431.796
四舍五入到小数点后两位,将得到 9431.80
。
数值数据类型不存储实际数字。它们存储数字的表示。 9431.80
和9431.8
是完全相同的数,存放在decimal
或double
变量中时不区分。
因此,如果您显示 9431.80
而未按某种方式对其进行任何格式化,它将显示为 9431.8
。所以问题在于您对数字如何存储在数字数据类型中的理解。
您使用 .ToString()
创建了一个具有特定小数位数的字符串。在这种情况下,您不需要使用 Math.Round()
。 .ToString()
将其四舍五入:
var p = 9431.796.ToString("0.00");
Console.WriteLine(p); // 9431.80
Math.Round(9431.796, 2)
return 保留一位小数,因为它四舍五入为 9431.80。显示时,它会去掉最后一个 0,这就是为什么你只看到一位小数的原因。
Math.Round(9431.796, 4)
绝对应该 return 9431.796。你能再测试一下吗?
你不能,因为 9431.80
等于 9431.8。然而,在这种情况下,我猜想您想以特定格式打印出来,可以这样做:
string p = Math.Round(9431.796, 2).ToString("0.00");
因为它四舍五入到 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
值。
为什么这段代码 returns 1 decimal
而不是 2
p = Math.Round(9431.796, 2);
如果我用 p = Math.Round(9431.796, 4);
替换它,它仍然 returns 1 decimal
如果将 9431.796
四舍五入到小数点后两位,将得到 9431.80
。
数值数据类型不存储实际数字。它们存储数字的表示。 9431.80
和9431.8
是完全相同的数,存放在decimal
或double
变量中时不区分。
因此,如果您显示 9431.80
而未按某种方式对其进行任何格式化,它将显示为 9431.8
。所以问题在于您对数字如何存储在数字数据类型中的理解。
您使用 .ToString()
创建了一个具有特定小数位数的字符串。在这种情况下,您不需要使用 Math.Round()
。 .ToString()
将其四舍五入:
var p = 9431.796.ToString("0.00");
Console.WriteLine(p); // 9431.80
Math.Round(9431.796, 2)
return 保留一位小数,因为它四舍五入为 9431.80。显示时,它会去掉最后一个 0,这就是为什么你只看到一位小数的原因。
Math.Round(9431.796, 4)
绝对应该 return 9431.796。你能再测试一下吗?
你不能,因为 9431.80
等于 9431.8。然而,在这种情况下,我猜想您想以特定格式打印出来,可以这样做:
string p = Math.Round(9431.796, 2).ToString("0.00");
因为它四舍五入到 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
值。