我只是碰到这段代码传来:在VB为什么(1 = 1)为假
Dim d As Double
For i = 1 To 10
d = d + 0.1
Next
MsgBox(d)
MsgBox(d = 1)
MsgBox(1 - d)
谁能解释我要什么原因呢?为什么d
设置为1
?
我只是碰到这段代码传来:在VB为什么(1 = 1)为假
Dim d As Double
For i = 1 To 10
d = d + 0.1
Next
MsgBox(d)
MsgBox(d = 1)
MsgBox(1 - d)
谁能解释我要什么原因呢?为什么d
设置为1
?
浮点类型和整数类型不能直接比较,因为它们的二进制表示是不同的。
添加0.1
十次作为浮点类型的结果可能是关闭到1的值,但不完全一样。
当比较浮点值时,您需要使用一个最小值,通过该值可以不同并仍然被视为相同的值(该值通常称为ε)。该值取决于应用程序。
我建议阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic进行深入的讨论。
至于comaring 1
到1.0
- 这些都是不同的类型,因此不会相互比较。
这是因为double总是只是值的近似值,而不是精确值本身(如浮点值)。当您需要精确的十进制值时,请使用十进制。与
对比度:
Dim d As Decimal
For i = 1 To 10
d = d + 0.1
Next
MsgBox(1)
MsgBox(d = 1)
MsgBox(1 - d)
0.1(1/10日)是一个重复分数当转换为二进制:
.0001100110011001100110011001100110011 .....
这就像试图将1/3显示为小数:你不能准确地做到这一点。
我明白了......为什么d被设置为1?如果它不完全是1 ... – Bartzilla
这是[ieee754](http://en.wikipedia.org/wiki/IEEE_754-2008)的一个特性, –
查看http://stackoverflow.com/questions/1530069/comparing-floatingpoint-values –