问题
0.3*23=6.9
用JS算了一个结果为:6.8999999999999995
怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。
比如:24*0.6 JavaScript算出来就是:14.399999999999999
其实根本原因是浮点型在内存中的存储方式和精度标准造成的,详细可以百度,一大堆。
解决思路
引入第三方js库 math.js 或者 BigNumber.js
下面介绍一下math.js,止于BigNumber.js自行研究,同理。
http://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.0/math.js
或者在这下载链接: http://pan.baidu.com/s/1Zl07PbA6erv42i7SWAH5yA 提取码: axsm
<span style="color:#2c3e50"><span style="background-color:rgba(255, 255, 255, 0.8)"><span style="background-color:#f5f2f0"><span style="color:#000000"><code class="language-javascript">引入:
页面入口处统一配置:
math<span style="color:#999999">.</span><span style="color:#dd4a68">config</span><span style="color:#999999">(</span><span style="color:#999999">{</span>
<span style="color:#990055">number</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">:</span></span> <span style="color:#669900">'BigNumber'</span><span style="color:#999999">,</span>
<span style="color:#708090">// 'number' (default), </span>
<span style="color:#990055">precision</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">:</span></span> <span style="color:#990055">20</span>
<span style="color:#999999">}</span><span style="color:#999999">)</span><span style="color:#999999">;</span></code></span></span></span></span>
原来算法:
var count=price*number;
修改后算法:
price=math.bignumber(price); //数据类型转换
number=math.bignumber(number); //数据类型转换
var count=price*number; //运算
count=math.number(count); //转换结果为数字,否则提取的是对象
注:常用的几个算法
| 运算 | 方法名 | 参数 | 备注 |
| 加 | math.add(a,b,c,…) | 参数个数>=2 | 得到几个数字的和 |
| 减 | math.subtract(a,b) | 参数个数=2 | 得到 a-b 的结果, 不可连减 |
| 乘 | math.multiply(a,b,c,…) | 参数个数>=2 | 得几个参数的乘积 |
| 除 | math.divide(a,b) | 参数个数=2 | 得到 a/b 的结果 ,不可连除 |
| 转换为bigNumber类型 | math.bignumber(a) | 浮点数,进行运算时,转换成bigNumber才能保证得到精确的结果 | |
| 转换为数字类型 | math.number(a) | bignumber为对象,此方法可以获取对象中的数字部分 |
本文探讨了JavaScript中浮点数运算导致的精度问题,并提供了解决方案。通过使用math.js库,能够有效地避免浮点数运算时出现的精度丢失现象。
1383

被折叠的 条评论
为什么被折叠?



