4

为什么=FALSE<10000000000评估为FALSE=FALSE>10000000000评估为TRUE?我尝试了一些不同的数字,这似乎总是如此。

4

2 回答 2

4

这是设计使然。搜索“排序疑难解答”的帮助以查看默认排序顺序。

在升序排序中,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 结尾!在细胞中。

这就是“为什么它会这样”的答案。我不知道“他们为什么要这样设计”的答案。

于 2012-11-21T20:57:33.060 回答
2

显然,布尔值 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 输出数字类型的数据。

于 2012-11-21T17:37:58.210 回答