【发布时间】:2012-10-19 17:05:02
【问题描述】:
?(1.0-0.9-0.1)
-0.000000000000000027755575615628914
?((double)1.0-(double)0.9-(double)0.1)
-0.000000000000000027755575615628914
?((double)1.0-(double)0.9-(double)0.1).GetType()
{Name = "Double" FullName = "System.Double"}
?((double)1.0-(double)0.9-(double)0.1).ToString()
"-2,77555756156289E-17"
Double.ToString() 如何显示比double 的精度(15-16) 更多的字符(32)?
我希望 MyObject.ToString() 代表 只是 MyObject 而不是 MyObject+SomeTrashFromComputer
为什么
?0.1
0.1
?0.2-0.1
0.1
?0.1-0.1
0.0
但是
?1.0-0.9-0.1
-0.000000000000000027755575615628914
为什么
?1.0-0.1-0.9
0.0
但是
?1.0-0.9-0.1
-0.000000000000000027755575615628914
【问题讨论】:
-
实际上你的 ToString() 结果有更少的(有效的)数字。而且它的字符肯定更少,大约一半。
-
您将精度与有效数字 (en.wikipedia.org/wiki/Significant_figures) 混淆了,您应该知道像 0.1 这样的小数不能精确地用二进制表示。您是否尝试过使用 Decimal 数据类型?
-
精度不准确,如果你不想要“垃圾”,不要使用Double,或者开始四舍五入。
-
@HenkHolterman 我认为“一些来自计算机的垃圾”表明他不知道浮点错误,而不是不知道科学记数法。
-
@Servy - 但不确定/不清楚,我关闭的主要原因。
标签: c# .net vb.net double floating-point-precision