十进制类型 - 从字符串解析时向控制台显示的奇数行为,带有冗余零
本文关键字:冗余 显示 字符串 类型 控制台 十进制 | 更新日期: 2023-09-27 18:34:32
我们发现一些奇怪的行为,小数显示在控制台上。最好用以下代码来描述这一点:
string num1AsString = "1.0000";
decimal num1AsDecimal = decimal.Parse(num1AsString);
string num2AsString = "1";
decimal num2AsDecimal = decimal.Parse(num2AsString);
Console.WriteLine(num1AsDecimal);
Console.WriteLine(num2AsDecimal);
控制台的输出为:
1.0000
1
但是,num1AsDecimal 和 num2AsDecimal 在调试器中仅显示为 1。num1AsDecimal 如何以某种方式保留 .0000?它似乎以某种方式坚持其字符串表示。这里有某种拳击吗?
比利·斯塔克
我们发现小数显示在控制台上的一些奇怪行为。
一点也不奇怪。它被记录在案:
比例因子还会保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用了适当的格式字符串,则 ToString 方法可以显示尾随零。
换句话说,调试器的行为在这里有点奇怪,而不是ToString()
。在调试器中,如果您观察num1AsDecimal.ToString()
,这也应该保留尾随零。
这是Jon Skeet链接的很好的解释,请参阅保持零
Decimal.Parse
MSDN 页面上的脚注说:
小数点的小数结果。解析将具有相同数量的 有效数字作为从中解析的字符串。即"3.43" 和"3.4300"在解析为相同的数值时,导致 不同的十进制表示形式。这(在某种程度上(在 小数的二进制表示形式的说明。