问题截图如上:
出现原因: 浮点数值的最高进度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制;
而Java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。
解决办法: 当前页面 购买次数 *100 * 单价 / 100
这个方法适合较小的两个数字相乘。
在当前业务场景下,可能会输入很大的购买次数 eg:1万。甚至更多。
最完美的解决办法:
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
(buyTimes *costPrice).toFixed(2)
解决完毕!!