decimal.ToString的不同行为

Dim*_*maK 3 c# decimal tostring

我遇到了一个非常奇怪的行为decimal.ToString:第一种情况: 在此输入图像描述

你可以看到那个变量ValueFloat = 9ValueFloat.Value.ToString("G") = "9".

第二种情况:

在此输入图像描述

你可以看到那个变量ValueFloat = 9ValueFloat.Value.ToString("G") = "9.000000000000000".

现在,怎么可能呢?变量ValueFloat在两种情况下都具有相同的值.

我假设它可能与文化有关,但在这两种情况下代码都在我的本地机器上运行,这显然具有相同的文化.

das*_*ght 7

如果该值是在点之后涉及有效数字的算术运算的结果,则可能发生这种情况.这是一个例子:

decimal a = 9;
decimal b = 1.23456789M;
decimal c = 10.23456789M;
decimal d = c-b; // The result is 9
Console.WriteLine("Values are the same: {0}", a == d);
Console.WriteLine(a.ToString("G"));
Console.WriteLine(d.ToString("G"));
Run Code Online (Sandbox Code Playgroud)

运行以上输出产生以下输出:

Values are the same: True
9
9.00000000
Run Code Online (Sandbox Code Playgroud)

  • @GeoffJames如果`ToString`对它转换为字符串的东西造成任何可检测的变化,我会感到惊讶.事实上,我将此报告给Microsoft作为一个错误.我认为OP的两个值是通过不同的代码路径获得的. (2认同)