1不等于1?

在命令窗口输入下面的代码:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

执行之后,你会惊讶地发现,d和1并不相等。
这是怎么回事,0.7 + 0.2 + 0.1明明就是1,而且第三条语句也证明了d的结果就是1啊。
这是因为d是Double类型,是浮点数,浮点数的1,可能并不会精确地等于1,而只是近似等于1。
毋需过分担心这种误差,这种误差只有10的负16次方左右,对日常计算的结果不会有任何影响,但是会影响数值比较的结果

如果需要精确比较两个数值,该如何处理呢,可以将上述代码改为:

Dim d As Double
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(Math.Round(d,
6) = 1
)

上面的代码,用Round函数将d的小数位数四舍五入到6位,然后再和1比较。

或者用Decimal类型代替Double类型:

Dim d As Decimal
d =
0.7 + 0.2 + 0.1
Output.Show(d)
Output.Show(d =
1
)

Decimal是高精度小数,不会有Double的那种误差。

 

 


 

 


本页地址:http://www.foxtable.com/webhelp/topics/1829.htm