Nick指出,公式“ = 0.28100-INT(0.28100)= 0”会返回False,即使它显然是正确的。他认为问题与舍入以及计算机如何使用二进制算术等有关。尼克将公式用作较大的IF语句的一部分,并且他认为Excel中还有其他舍入错误会影响并咬住他。 。他想知道是否有一种简单的方法可以避免这样的公式陷阱。

在研究避免此类问题的简单方法之前,重要的是要了解为什么存在该问题。正如Nick所指出的,它确实与二进制算术以及Excel对信息进行四舍五入有关。在后台,Excel总是将信息四舍五入到15位数字。考虑一下Nick正在使用的计算:

=0.28100-INT(0.28100)=0

当Excel首次计算时,Excel的优先级以这种方式计算:

=(0.28100-INT(0.28100))=0

注意额外的括号。最后一个等号左边所有内容的结果为3.55E-15,这意味着您将得出以下(纵向)公式:

=0.00000000000000355=0

这显然是不正确的,这就是为什么您返回值False的原因。有几种方法可以“解决”这种情况。在这种情况下,也许最简单的方法就是简单地更改公式以消除与零比较的需要:

=0.28100=INT(0.28100)

如您所料,此公式将返回True。但是,这可能无法满足您的所有需求。因此,避免问题的更好的经验法则是永远不要依赖Excel的舍入。您可以通过实现自己的显式舍入来实现此目的,如以下公式所示:

=INT(0.28100)-INT(0.28100)=0 =ROUND(0.28100,0)-INT(0.28100)=0 =ROUND(0.28100,5)-ROUND(0.28100,5)=0

请注意,在这些情况下,您不允许Excel以最高精度执行计算,因为当您与特定值(例如零)进行比较时,这可能会导致某些意外结果。

取而代之的是,您迫使Excel将值(正在使用的所有值)四舍五入到比较所需的任何精度水平。

另一种方法是不与精确值(例如零)进行比较。取而代之的是,在比较中考虑一些“忽悠因素”,从而考虑到四舍五入问题。例如,您可以确定只关心比较是否精确到假设的任何单位的百分之一。在这种情况下,可以按以下方式修改原始公式:

=0.28100-INT(0.28100)<0.01

如人们所料,这将返回True。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(8145)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: