Excel ROUND函数转JavaScript后结果不一致的问题及自定义方案异常咨询
Excel ROUND函数转JavaScript后结果不一致的问题及自定义方案异常咨询
最近在把Excel里的ROUND函数转换成JavaScript实现时,碰到了浮点运算处理差异的坑,想跟大家聊聊这个情况以及我自己试的方案遇到的新问题:
- 首先发现,JavaScript和Excel对浮点算术的处理逻辑不一样。用JS原生的
toFixed()方法没法得到和Excel ROUND函数一致的结果,根源在于JS采用二进制浮点存储数字,导致部分数值的内部表示和实际值存在细微偏差。 - 具体来说,
toFixed()方法会把数字转成字符串,并按指定小数位四舍五入,但受限于JS的浮点存储机制,结果可能不符合预期。比如数值179.725,JS内部可能存成略小于实际值的数,这时候用toFixed(2)得到的是179.72,但Excel里ROUND(179.725,2)的结果却是179.73。 - 我自己尝试了一个临时方案:根据要保留的小数位数,给目标数值加上一个极小的偏移量(比如保留两位小数就加0.001),这个方法在大部分场景下都能和Excel的ROUND结果对齐,但碰到数值是0.499的情况时就出问题了——加0.001后变成0.5,再做四舍五入得到的结果就和Excel的预期结果不符了,想请教下大家有没有更可靠的解决办法?
备注:内容来源于stack exchange,提问作者Vishnu Prakash
相关产品推荐
相关产品推荐

