我是学生,我的软件老师给了我们这个例子 -
battery = ''.join(c for c in battery if not c.isdigit() and not c.isspace())
如果两个数字,第一个和第二个相同(比如2,2),则将采用ELSE路径,如第一个<第二个评估为false,因此不执行。
但是,我的软件老师说,在某些语言中,两个数字相同都会有问题并导致错误或奇怪的行为(我相信他引用Visual Basic作为一个例子)。我不知道这是怎么可能的。 IF语句被评估为true或false,因此必须运行其中一个选项,并且在评估2是否小于2时应该没有问题。
虽然他是我的老师而且我尊重他,但我并不完全信任他,而且他有时会犯错误。他说的是对的吗?如果是这样,我可以举一些具体的例子吗? 感谢。
答案 0 :(得分:4)
也许他正在谈论浮点不精确(围绕着一轮)?
评估2是否小于2时应该没有问题。
对于使用不精确表示存储的某些数字,情况并非总是如此,例如:
Dim first As Double, second As Double
first = 0.3
second = 0.1 + 0.2
If first < second Then
Debug.Print first, "is less than", second
Else
Debug.Print "equal or greater"
End If
输出:
0.3 is less than 0.3
请参阅Is floating point math broken?
当一个超出浮点类型的安全范围时,例如在JavaScript中,这可以更明显地表现出来:
> 9007199254740992 == 9007199254740993
< true
答案 1 :(得分:2)
据我所知,expression
中的if (expression)
总是计算为布尔值。至少在C,C ++,PHP,Java,.NET,Python,Javascript中都是如此......
但也许在一些旧的或较少使用的语言中并非如此。
对于Visual Basic,this Microsoft documentation page明确表示number < number
将评估为FALSE
。
答案 2 :(得分:0)
很明显a&lt;如果a是整数(不是小数),则a为假。但是在小数的情况下,这可能是假的。让我给出c语言的每个实例。 C编译器使用IEEE-754数字表示浮点。
取a = 0.1273(存储在内存中:0.1272999423027039)
取b = 0.12且c = 0.0073 + b
现在如果你检查, c 这是真的。