js中浮点运算的分析
浮点类型是如何在js中运行的例如,var a=0.69;
我想得到6.9直接写var C = A * 10;
警报(c);结果是:6.8999999999999995
对于在线搜索,有网友表示,这是js浮点错误,找到解决方案:
方法一:有js自定义函数
复制代码代码如下所示:
+加函数,用于获得准确的加法结果
说明: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添加结果会出现错误,当两个浮在一起时会更明显。这个函数返回更精确的加法结果。
/ /电话:accadd(arg1,arg2)
/ /返回值:ARG1加arg2准确的结果
功能accsub(arg1,arg2){
var,R2,m,n;
尝试{ R1 = arg1.tostring(Split()。{){ 1 } }长度捕获(e){ = 0 }
尝试{ R2 = arg2.tostring(Split()。{){ 1 } }长度捕获(e){ = 0 }
M = math.pow(10、Math.max(R1,R2));
/ /最后修改的deeka
动态控制精度长度
N(= R2 = R2);
返回(((arg1 * m-arg2×m)/ M)ToFixed(N);
}
得到精确的除法/函数除法结果
说明: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,这个);
}
var a=0.69;
var b=10;
警报(A * B);6.8999999999999995
警报((* * 100) / 10);
对函数的直接调用是可能的。
方法二:如果我们知道小数位数,我们可以考虑通过增加浮点放大到整数类型(然后除以相应的倍数)来得到正确的结果。
警报(11 * 22.9);251.89999999999998
警报(11 *(22.9 * 10) 10);251.9