码迷,mamicode.com
首页 > Web开发 > 详细

关于JS数学计算精度不准和自动转科学计数法的问题

时间:2015-06-17 11:01:48      阅读:875      评论:0      收藏:0      [点我收藏+]

标签:

在javaScript中,数学计算是一个很坑爹的问题,

  由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题。

  而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已。

 

第一个,浮点数计算精度:

  比如:1.2*3 = 3.599999999....

  

  解决办法:

    ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值。即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和);

      至于多个浮点数的乘除,就不多说,算法一样

     注:此方法还有一些计算有瑕疵,以前做过科学计算器貌似这个算法就有问题,但具体的太久我也记不起来了。但是这个方式处理一般的运算还是足够的。

 

    ⑵将浮点数小数点向右移位,当浮点数全部化为整数时,去除小数点再进行计算。算出结果之后对结果进行小数点向左移n位;(n为小数点数位之和);

      注:这个方法的逻辑和上一方法其实是一样的,但是脱离了后面的除法计算,而改为字符串处理,让结果精度更有一些保障(个人不敢太相信JS的Math计算,被坑过的自然懂)。

 

第二个,计算结果自动化为科学计数法

    其实这个也算不上是BUG,但是如果要对数据进行字符串处理的时候,就有些坑了。

    附:将科学计数法化为普通计数的函数。

 

最后,不晓得能不能提交附件,不然就上传一个以前做的js数学计算插件,感觉还是挺管用的

  里面有js的加减乘除基本运算(保证精度)、约分、公约数公倍数、数学表示法转换、取小数点位数、四舍五入的各种方法。有兴趣的可以去瞄一瞄

      网盘链接:http://pan.baidu.com/s/1bng2Yrd  插件名:com.snowActivity.math.js

关于JS数学计算精度不准和自动转科学计数法的问题

标签:

原文地址:http://www.cnblogs.com/lovetosleep/p/4582536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!