为什么=FALSE<10000000000
评估为FALSE
和=FALSE>10000000000
评估为TRUE
?我尝试了一些不同的数字,这似乎总是如此。
2 回答
这是设计使然。搜索“排序疑难解答”的帮助以查看默认排序顺序。
在升序排序中,Microsoft Excel 使用以下顺序。
数字:数字从最小的负数到最大的正数排序。
字母数字排序:当您对字母数字文本进行排序时,Excel 会从左到右逐个字符地排序。例如,如果单元格包含文本“A100”,Excel 会将单元格放置在包含条目“A1”的单元格之后和包含条目“A11”的单元格之前。
包含数字的文本和文本按以下顺序排序:
0 1 2 3 4 5 6 7 8 9(空格)!" # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~ + < = > ABCDEFGHIJKLMNOPQRSTU VWXYZ
撇号 (') 和连字符 (-) 将被忽略,但有一个例外:如果两个文本字符串除连字符外相同,则带有连字符的文本排在最后。
逻辑值:在逻辑值中,FALSE 放在 TRUE 之前。
错误值:所有错误值都相等。
空白:空白总是放在最后。
默认排序顺序很重要,因为这就是 Excel 设计用于比较不同数据类型的方式。逻辑值总是在文本和数字之后。错误值总是在那之后。空白总是最后的。当您使用比较运算符(<、<=、= 等)时,它使用与排序相同的比较算法(或者更可能的是,排序算法使用比较运算符代码,这使得它们相同)。
TRUE<>1
根据排序顺序,但是--TRUE=1
. 公式解析器识别出您正在尝试否定某些内容。如果它是布尔值,则将其转换为 0 或 1。布尔值没有 0-ish 或 1-ish,它只是内部类型强制函数的结果。如果你键入--"SomeString"
它会做同样的事情。它将字符串发送到类型强制函数,该函数返回“无法强制”并以 #VALUE 结尾!在细胞中。
这就是“为什么它会这样”的答案。我不知道“他们为什么要这样设计”的答案。
显然,布尔值 TRUE/FALSE 是与数字不同的数据类型。检查此(http://msdn.microsoft.com/en-us/library/office/bb687869.aspx)以查看布尔变量存储在 2 字节中(或对于特定体系结构的任何短整数)。然而,这是存储数据的内存,因为 excel 实际上有一个用于布尔变量的特殊数据类。具体来说:xltypeNum 用于数字,xltypeStr 用于字符串,xltypeBool 用于我们讨论的内容。
相同类型之间的关系很清楚,现在 TRUE<1000 做了什么?可能没有什么有意义的有用的。
克服这个问题的方法:
=ABS(BOOLEAN_VAR), i.e. =ABS(FALSE) --> 0 and =ABS(TRUE) --> 1
或者
=INT(BOOLEAN_VAR), i.e. =INT(FALSE) --> 0 and =INT(TRUE) --> 1
或者
=BOOLEAN_VAR*1, i.e. =FALSE*1 --> 0 and =TRUE*1 --> 1
或者
=+BOOLEAN_VAR, i.e. =+FALSE --> 0 and =+TRUE --> 1
正如您在这些方式中看到的那样,您可以通过将布尔值提供给函数或在表达式中使用布尔变量来强制 excel 输出数字类型的数据。