javascript十进制乘法结果错误的处理方法

javascript十进制乘法结果错误的处理方法
1。计算的JS

12.32×7的结果是多少

答:86.24000000000001
为什么会出现这样的问题如何解决

当js在处理小数乘法和除法是一个bug时,该解决方案可以改为:十进制整数处理。

上述计算可改为:

12.32 * 100 * 7 100

结果是:86.24,正确
然后再计算。

8.80 * 100 * 12 100

结果:105.60000000000002

38.80也会有类似的问题。
精度提高10倍:

8.80 * 1000 * 12 1000

结果:105.6

这是正常的。
16.40 * 1000000 * 6 1000000

结果也有问题。
为了使JS更准确,可以通过直接将JS十进制值扩大10000倍并将其除以10000来解决这个问题。

var = 38.80;

VaR num2 = 13;

警报(号码* 10000 * 12 10000);
乘法和删除的数目最适合测试10000,有些数字没有问题,(1000000)一些数字也是毫无疑问的。

两,
数量。原型。
varostr = this.tostring();
如果(ostr.indexof(,)= = 1)
return1;
其他的
returnmath.pow(10,parseInt(ostr.length-ostr.indexof(。1));
}

Functiontran(){
args = tran.arguments;
vartemp = 1;
为(i = 0;i < args.length;i++)
临时* =参数{我}和{我} *率();
为(i = 0;i < args.length;i++)
温度/ =参数{我}率();
returntemp
}

警报(Tran(11,22.9));

这个解决方案是一个更麻烦的方法,但它让你对解决这个问题的实际过程有一个大致的了解。

得到精确的除法/函数除法结果
说明:Javascript /除法结果会出现错误,当两个浮点除法更为明显时,这个函数返回一个更精确的除法结果。
/ /电话:accdiv(arg1,arg2)
/ /返回值:准确的结果除以2 arg1
功能accdiv(arg1,arg2){
var t1 = 0,T2 = 0,R1,R2;
尝试{ T1 = arg1.tostring(。分)(。){ 1 }。长度}赶上(e){ }
尝试{ T2 = arg2.tostring(。分)(。){ 1 }。长度}赶上(e){ }
用(数学){
R1 =数(arg1.tostring()。更换(,
R2 =数(arg2.tostring()。更换(,
返回(R1和R2)* pow(10,T2-T1);
}
}

一种增加div数类型的方法,更方便调用。
number.prototype.div =功能(arg){
返回accdiv(这,Arg);
}

熟悉乘法函数,精确乘法
说明:当两个浮点乘法更为明显时,将出现错误,此函数返回更精确的乘法结果。
/ /电话:accmul(arg1,arg2)
/ /返回值:ARG1乘以2准确的结果
功能accmul(arg1,arg2)
{
var m = 0,S1,S2 = = arg1.tostring()()arg2.tostring;
尝试{ M + = s1.split(,){ 1 }。长度}赶上(e){ }
尝试{ M + = s2.split(,){ 1 }。长度}赶上(e){ }
回数(s1.replace(。
}

一种提高多 /数字型的方法,调用起来更方便。
number.prototype.mul =功能(arg){
返回accmul(Arg,这个);
}

/ /添加剂的功能,用于获得准确的结果
说明:Javascript添加结果会出现错误,当两个浮在一起时会更明显。这个函数返回更精确的加法结果。
/ /电话:accadd(arg1,arg2)
/ /返回值:ARG1加arg2准确的结果
功能accadd(arg1,arg2){
var,R2,m;
尝试{ R1 = arg1.tostring(Split()。{){ 1 } }长度捕获(e){ = 0 }
尝试{ R2 = arg2.tostring(Split()。{){ 1 } }长度捕获(e){ = 0 }
M = math.pow(10、Math.max(R1,R2))
返回(arg1 * M + 2×m)/ m
}

一种增加加号类型的方法,更方便调用。
number.prototype.add =功能(arg){
返回accadd(Arg,这个);
}
以上Javascript小数乘法误差是由萧边。我们希望能给你一个参考,希望你能支持它。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部