但是,如果你把这个算式用于MATCH等函数内,结果却是报错的……
因为对Excel来说,浮点精度是可以超过15位的,可以视为高精度的浮点误差
百度后发现JS里0.1 0.2就是典型浮点误差结果为:
0.30000000000000004
由于Excel有15位精度限制,故只显示出0.3,因为15位下剩余小数位数均为0未显示出来,因此,这个性质说明Excel的浮点精度是可以高于15位的。
在实际测试中,发现部分函数能识别这种高于15位的精度差异,而且这种差异会影响公式结果,这些函数包括:
RANK、FREQUENCY、MATCH、MODE、VLOOKUP、MODE.MULT、HLOOKUP、LOOKUP
有好多同学已经被类似0.1 0.2这种不产生大量小数位数的浮点误差坑过,因为使用F9或者等号检测时都无法检测出这种高于15位的精度差异。
看到这里肯定有人会问,有没有什么函数能直接识别这种精度差?
答案是当然有,有个DELTA函数专门判断参数是不是相等的,可以识别出来,这个函数的结果为1,说明参数完全相等,为0则说明是有差异的:
除了使用ROUND修正精度的方式外,有时候我们也可以使用像COUNTIF这种不识别高于15位的精度的函数来解决这类数值的匹配问题,因为COUNTIF的第二参数在没有无比较运算符和通配符等时,会将数字全部识别为数值型统计且不会识别高于15位的精度。