decimal.ToString 的不同行为
Different behavior for decimal.ToString
我遇到了 decimal.ToString
的一个非常奇怪的行为:
第一个案例:
您可以看到变量 ValueFloat = 9
和 ValueFloat.Value.ToString("G") = "9"
。
第二种情况:
你可以看到变量 ValueFloat = 9
和 ValueFloat.Value.ToString("G") = "9.000000000000000".
现在,这怎么可能?变量 ValueFloat 在这两种情况下具有相同的值。
我假设它可能与文化有关,但在这两种情况下,代码都在我的本地计算机上运行,显然具有相同的文化。
如果该值是涉及点后有效数字的算术运算的结果,则可能会发生这种情况。这是一个例子:
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"));
运行上面produces下面的输出:
Values are the same: True
9
9.00000000
我遇到了 decimal.ToString
的一个非常奇怪的行为:
第一个案例:
您可以看到变量 ValueFloat = 9
和 ValueFloat.Value.ToString("G") = "9"
。
第二种情况:
你可以看到变量 ValueFloat = 9
和 ValueFloat.Value.ToString("G") = "9.000000000000000".
现在,这怎么可能?变量 ValueFloat 在这两种情况下具有相同的值。
我假设它可能与文化有关,但在这两种情况下,代码都在我的本地计算机上运行,显然具有相同的文化。
如果该值是涉及点后有效数字的算术运算的结果,则可能会发生这种情况。这是一个例子:
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"));
运行上面produces下面的输出:
Values are the same: True
9
9.00000000