1、1,计算时产生的大量小数位数
2、2,无法录入的数据由于浮点的问题,有些特殊数录入就能生成浮点,导致无法录入正确内容,32768.598有兴趣你就试试在excel里录入这个数。
3、然而这两种浮点数,在把小数位数调高后都很容易发现异常,因此稍微对Excel有一定了解的伙伴都会知道用ROUND函数修正精度,但是,Excel里存在一类更危险的的浮点数。
4、截图为目前这类数里目前测试下最简单的算式。0.1+0.2,无论如何调高小数位数还是显示为0.3,使用公式求值或者F9抹黑算式检查也不会出现大量小数位数,均为0.3。等号判断下和直接键入的0.3也是相同的。
5、但是,如果你把这个算式用于MATCH等函数内,结果却是报错的……
6、因为对Excel来说,浮点精度是可以超过15位的,可以视为高精度的浮点误差百度后发现JS里0.1+0.2就是典型浮点误差结果为:0.30000000000000004
7、由于Excel有15位精度限制,故只显示出0.3,因为15位下剩余小数位数均为0未显示出来,因此,这个性质说明Excel的浮点精度是可以高于15位的。
8、在实际测试中,发现部分函数能识别这种高于15位的精度差异,而且这种差异会影响公式结果,这些函数包括:RANK、FREQUENCY、MATCH、MODE、VLOOKUP、MODE.MULT、HLOOKUP、LOOKUP有好多同学已经被类似0.1+0.2这种不产生大量小数位数的浮点误差坑过,因为使用F9或者等号检测时都无法检测出这种高于15位的精度差异。看到这里肯定有人会问,有没有什么函数能直接识别这种精度差?答案是当然有,有个DELTA函数专门判断参数是不是相等的,可以识别出来,这个函数的结果为1,说明参数完全相等,为0则说明是有差异的:
9、除了使用ROUND修正精度的方式外,有时候我们也可以使用像COUNTIF这种不识别高于15位的精度的函数来解决这类数值的匹配问题,因为COUNTIF的第二参数在没有无比较运算符和通配符等时,会将数字全部识别为数值型统计且不会识别高于15位的精度。
10、个人建议最终效果如图所示。