JS数字计算精度问题解决

 1       add(a, b) {//相加
 2           var c, d, e;
 3           try {
 4             c = a.toString().split(".")[1].length;
 5           } catch (f) {
 6             c = 0;
 7           }
 8           try {
 9             d = b.toString().split(".")[1].length;
10           } catch (f) {
11             d = 0;
12           }
13           return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) + this.mul(b, e)) / e;
14       },
15       sub(a, b) {//相减
16         var c, d, e;
17         try {
18           c = a.toString().split(".")[1].length;
19         } catch (f) {
20           c = 0;
21         }
22         try {
23           d = b.toString().split(".")[1].length;
24         } catch (f) {
25           d = 0;
26         }
27         return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) - this.mul(b, e)) / e;
28       },
29       mul(a, b) {//主体
30         var c = 0,
31           d = a.toString(),
32           e = b.toString();
33         try {
34           c += d.split(".")[1].length;
35         } catch (f) { }
36         try {
37           c += e.split(".")[1].length;
38         } catch (f) { }
39         return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
40       },
41       div(a, b) {//除
42         var c, d, e = 0,
43           f = 0;
44         try {
45           e = a.toString().split(".")[1].length;
46         } catch (g) { }
47         try {
48           f = b.toString().split(".")[1].length;
49         } catch (g) { }
50         return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), this.mul(c / d, Math.pow(10, f - e));
51       }

js在数字计算时,因为IEEE 754会有精度丢失,完善一下,需要用到哪个,只要mul和你用到的函数就OK

原文地址:https://www.cnblogs.com/maomao93/p/9172625.html

时间: 2024-09-30 23:27:28

JS数字计算精度问题解决的相关文章

JS数字计算精度误差的解决方法

本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了.但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了. 不信?我们可以做个试验. 先来看一段 JS. var num1 = 0.1; var num2 = 0.2; alert(num1+num2 ===

javascript避免数字计算精度误差的方法详解

本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了.但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了.不信?我们先来看一段 JS. var numA = 0.1; var numB = 0.2; alert( (numA + numB) === 0.3

关于js浮点数计算精度不准确问题的解决办法

今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精度的文章.觉得别人写的挺好了,我在简单的总结一下,以方便后续查阅. 浮点数误差产生的原因: 先看一个实例: 0.1 + 0.2 =? 0.1 + 0.2 = 0.3? 我们先来看一段 JS. console.log( 0.1+ 0.2); 输出为 0.30000000000000004.是不是很奇葩

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

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

关于js中计算精度的问题解决办法

/** * 解决js中浮点数的精度问题 * @parem f 要精度的值 * @parem digit 要精确的位数 * */ var htmlObj = {};htmlObj.formatFloat = function(f, digit) { var m = Math.pow(10, digit);//Math.pow(x,y)返回 x 的 y 次幂的值 return parseInt(f * m, 10) / m;};

黄聪:JS数学计算精度修正

问题描述 如果我问你,4330.61乘以100等于多少,我猜你肯定跟我说:“肯定是 433061”啊! 是啊,要我我也是这么回答,来来来我们来看看浏览器怎么说吧,如下图 浏览器告诉我,他就是算不对 偌!浏览器告诉我,他就是算不对,这要是给客户算钱,客户不就有意见了.... WHY?计算机计算出来的还不如我自己的心算呢!!!! 如果你想了解什么原因,您请看=>js浮点数精度问题的前世今生? 解决办法 ;(function(){ function mathService(){ this.add=fu

js数字位数太大导致参数精度丢失问题

最近遇到个比较奇怪的问题,js函数里传参,传一个位数比较大,打印arguments可以看到传过来的参数已经改变. 然后查了一下,发现确实是js精度丢失造成的.我的解决方法是将数字型改成字符型传输,这样就不会造成精度丢失了.如下图: JS 数字丢失精度的原因 计算机的二进制实现和位数限制有些数无法有限表示.就像一些无理数不能有限表示,如 圆周率 3.1415926...,1.3333... 等.JS 遵循 IEEE 754 规范,采用双精度存储(double precision),占用 64 bi

Javascript优化后的加减乘除(解决js浮点数计算bug)

说明 众所周知,js在计算浮点数时候,结果可能会不准确.比如:(在chrome中的运算结果) 2.2 + 2.1 = 4.300000000000001 2.2 - 1.9 = 0.30000000000000027 2.2 * 2.2 = 4.840000000000001 2.1 / 0.3 = 7.000000000000001 网上流传的代码(有bug) 网上流传的优化后的代码如下(有问题的代码,请勿使用) function add(a, b) { var c, d, e; try {

js浮点数计算(加,减)

最近工作中经常遇到需要处理浮点型计算的问题,开始一直都在用把浮点数先乘以10的对应小数的位数的次方化成整数再去开始计算. 例如100.01+100.02,可以化成(100.01*100+100.02*100)/100来做计算,但是最近发一个浮点数乘以一个10的次方也会有精度问题发生,突然感觉前面的工作是不是有好多地方埋了很多坑啊,不能愉快的工作啦. 正好周未没什么别的计划,想研究下怎么处理JS的浮点型计算的精度问题 既然浮点数的计算精度有问题,那何不就在计算过程中绕过浮点型的计算了,于是有如下思