我正在使用 .Net 3.5 在 C# 中编程,试图控制将 float 输出为字符串的格式。
但是,我看到了一些意想不到的行为。 如果我的代码包含(例如):
float value = 50.8836975;
编辑 抱歉,(已删除的)代码“样本”没有帮助。基本上,当我在“值”(C# float )后设置断点时,我的问题是试图解释下面调试语句的结果,该断点已分配给计算结果。 Jon Skeet的答案正是我所需要的(他的第一行让我去寻找那些无用的代码)。
当我在立即窗口中尝试各种选项时,我会看到以下结果:
?value
50.8836975
?value.ToString("G9")
"50.8836975"
?value.ToString("F9")
"50.883700000"
谁能解释为什么我的 F9 格式的值似乎丢失了 3 位精度?
最佳答案
你的问题不清楚,因为你给出了一个没有 f
后缀的真实值,并试图将它分配给一个 float
变量。如果您实际使用的是 float
变量,则准确 值为
50.883697509765625
如果您实际上使用的是 double
变量,那么确切的值是:
50.8836974999999966939867590554058551788330078125
如果您使用float
,我得到的结果与您按 F9 得到的结果相同,但如果您使用 double
,则不会。
System.Single
的文档揭示了精度降低的原因。 ( float
):
By default, a Single value contains only 7 decimal digits of precision, although a maximum of 9 digits is maintained internally.
我相信 F
正确显示了所有 real 精度数字,以试图阻止您相信您实际上获得的信息比您拥有的更多.
关于c# - ToString ("F") 相对于 ToString ("G") 是否失去精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570796/