如果语句不被视为布尔值?

时间:2016-05-04 11:32:48

标签: if-statement vb6 language-agnostic pseudocode

我是学生,我的软件老师给了我们这个例子 -

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时应该没有问题。

虽然他是我的老师而且我尊重他,但我并不完全信任他,而且他有时会犯错误。他说的是对的吗?如果是这样,我可以举一些具体的例子吗? 感谢。

3 个答案:

答案 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    这是真的