在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