乘法计算的问题。有什么好的解决方法么?
发布于 1 年前 作者 CNBlackJ 1299 次浏览 来自 问答

屏幕快照 2017-06-27 上午9.57.38.png

> 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()这个方法或许可以帮助你解决问题

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就够用了。。

回到顶部