乘法计算的问题。有什么好的解决方法么?
> 0.1 * 0.2
0.020000000000000004
> 69.99 * 100
6998.999999999999
> 129.99 * 100
12999
13 回复
浮点数精度的问题。大学计算机原理就讲过。 你如果不喜欢这种,可以先放大 10n次方,结果在除回来,之后保留你希望的小数点后尾数
基本上所有的计算机语言都是采用IEEE-745浮点数表示法(一种二进制表示法,可以精确地表示分数),所以对于 1/2<sup>n</sup> ,2的n次方分之几 这样的小数表示的很好。JavaScript toFixed()这个方法或许可以帮助你解决问题
toFixed(n)
https://github.com/adamwdraper/Numeral-js 你可能需要这个包,除法还是需要toFixed()方法
有现成的库 可以解决
@stonephp 这个方法我有试过的,我觉得还是不能比较好解决。要通过判断小数位数来确定放大的倍数。
> (69.99 * 1000) / 10
6999
> (69.99 * 10000) / 100
6999
> (69.99 * 100000) / 1000
6998.999999999999
@CRAZYFAKE 我后面采用的也是这个方案。
@CNBlackJ 如果是你在计算和钱、账目相关的东西要去用高精度的计算库。如果是普通的计算,那么你不比在意小数点后面几位,你只要知道你的需求方需要结果的精度就可以了。
@CRAZYFAKE 目前采用的是toFixed。
@stonephp 对的。目前只是简单的数字转换,没涉及到紧密计算。
@o6875461 只是简单的转换数字,用库显得有点大材小用或者说有点重,所以没采用第三方库。
@CNBlackJ 非常同意8楼的看法。简单的数字转换的话,toFixed
就够用了。。