一种求解浮点乘法浮点错误的方法

一种求解浮点乘法浮点错误的方法
js中的小数相乘会出现浮点错误,可以进行详细的测试。
警戒(11 * 22.9)
结果是251.89999999999998而不是251.9。

这个问题一定有很多人头疼,你是怎么解决的这里给出了解决方案。

1,
复制代码代码如下所示:

警报(11 *(22.9**10) / 10);
解决这一问题的思路是先把系数放大成整数,然后再由相应的乘数进行划分,得到正确的结果。
2,
复制代码代码如下所示:

数量。原型。
听听听听听听听听听听听= this.tostring(VAR);
如果(ostr.indexof(,)= = 1)
返回1;
其他的
返回math.pow(10,parseInt(ostr.length-ostr.indexof(,)- 1)));
}

函数传递(){
args = tran.arguments;
var = 1;
为(i = 0;i < args.length;i++)
临时* =参数{我}和{我} *率();
为(i = 0;i < args.length;i++)
温度/ =参数{我}率();
回复
}

警报(Tran(11,22.9));
这个解决方案是一个更麻烦的方法,但它让你对解决这个问题的实际过程有一个大致的了解。

你也可以使用四轮和五个条目。JS,你可以使用math.round实现四轮和五个整数。如果要精确地实现小数位数,则需要编写函数。
复制代码代码如下所示:
函数的ForDight(Dight如何){
整顿= math.round(装* math.pow(10,如何math.pow))/(10,如何);
Dight回来了;
}

得到精确的除法/函数除法结果
说明: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,这个);
}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部