0

我们发现了一些奇怪的行为,小数点显示在控制台上。下面的代码最好地描述了这一点:

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?它似乎以某种方式坚持其字符串表示。这里有拳击吗?

比利·斯塔克

4

3 回答 3

2

这是 Jon Skeet链接的很好的解释,请参阅保持零

于 2012-05-17T10:25:12.470 回答
2

我们发现了一些奇怪的行为,小数点显示在控制台上。

这一点都不奇怪。它记录在案

缩放因子还保留 Decimal 数字中的任何尾随零。尾随零不会影响算术或比较运算中的 Decimal 数的值。但是,如果应用了适当的格式字符串,则 ToString 方法可以显示尾随零。

换句话说,这里稍微奇怪的是调试器的行为,而不是ToString(). 如果您在调试器中观看num1AsDecimal.ToString(),那也应该保留尾随零。

于 2012-05-17T10:26:26.453 回答
2

MSDN页面上的脚注Decimal.Parse说:

decimal.Parse 的十进制结果将具有与解析它的字符串相同的有效位数。也就是说,“3.43”和“3.4300”在解析为相同的数值时,会产生不同的十进制表示。这(在某种程度上)在十进制的二进制表示的描述中得到了解释。

于 2012-05-17T10:26:36.903 回答