您好,欢迎访问一九零五行业门户网

javascript 浮点数(js浮点计算精度问题)

本文主要介绍javascript浮点数(js浮点计算精度问题),下面一起看看javascript浮点数(js浮点计算精度问题)相关资讯。
javascript中只有一种类型的数字,javascript中所有的数字都用ieee-754标准格式表示。浮点数的准确性不是javascript独有的,因为用二进制表示的十进制数是无限的。十进制二进制0.1 0.0001100110011001…0.2 0.001100111…0.3 0.01001101100…0.4 0.001101101110…0.5 0.6 0.100010.1000111011 javascript中的问题比较复杂,这里只给出部分测试数据:console.log(1really console . log(1.0-0.2 = = 0.8)//really console . log(1.0-0.1 = = 0.9)//really这个1.0-0.9怎么避免!= 0.1非bug问题下面给出了一个更广泛使用的解决方案。在判断浮点运算的结果之前,会降低计算的精度,因为在降低精度的过程中总有四轮五项。(1.0-0.9)。tofixed (bit)//precision参数应介于0和20之间。console . log(parse float((1.0-0.9))。fixed(10))= 0.1//true)console . log(parse float((1.0-0.8)。fixed(10))= 0.2//true)console . log(解析浮点((1.0-0.7)。tofixed(10))= 0.3//true)console . log(parse float((11.0-11.8))。fixed(10))= = = 0.8)//真的写个办法:确定值的方法等于//(number1,number2函数相等,number){ number = number = undefined 10:number;默认精度为10。返回number1.tofixed(数字)= number2.tofixed(数字);} console.log(等于(1.0-0.7,0.3));//真原型/扩展模式,偏好面向对象风格number . prototype . is equal = function(位数){ number = number = undefined 10:number;默认精度为10。返回this . to fixed(digits)= number . to fixed(numbers);} console.log((1.0-0.7).is equal(0.3));//真的接下来,试试浮点运算。console . log(1.79 0.12)//1.91000000000000001 console . log(2.01-0.12)//1.88999999999999997 console . log(1.01×1.3)//1.3130000000000002 console . log(0.69/10)//0.0689999999999999说明:javascript加法结果会有误差,两者浮动在一起会更明显。这个函数返回一个更精确的加法结果。//tel: accadd(arg1,arg2)//返回值:arg1加arg 2精确结果函数accadd(arg1,arg2){ var,r2,m;试试{r1 = arg1.tostring(split)。{){ 1}}长度捕获(e){ = 0 } try { r2 = arg 2 . tostring(split。{){ 1 } } length capture(e){ = 0 } m = math . pow(10,math.max(r1,r2))返回(arg1 * m 2×m)/ m}增加加号类型的方法,调用起来更方便。number . prototype . add = function(arg){ return accadd(arg,this);}减能,减法得到准确结果:javascript加法的结果会有误差,两者浮动在一起会更明显。这个函数返回一个更精确的减法结果。//tel: accsub(arg1,arg 2)//返回值:arg1减2精确结果函数accsub(arg1,arg2){ var,r2,m,n;试试{r1 = arg1.tostring(split)。{){ 1}}长度捕获(e){ = 0 } try { r2 = arg 2 . tostring(split。{){ 1}}长度捕获(e){ = 0} m = math.pow(10,math.max(r1,r2)););//最后修改的deeka动态控制精度长度n(= r2 = r2);returns((arg 1 * m-arg 2×m)/m)fixed(n);}得到一个准确的除法/函数除法结果。描述:javascript/除法结果会出错。当两个浮点除法比较明显的时候,这个函数会返回一个比较准确的除法结果。//tel: accdiv(arg1,arg 2)//返回值:精确结果除以2 arg1函数accdiv(arg1,arg2){ var t1 = 0,t2 = 0,r1,r2;尝试{t1 = arg1.tostring(。分)(。){ 1 }。length}追到(e){}试试{t2 = arg2.tostring(。分)(。){ 1 }。长度}赶上(e){}使用(数学){r1 =数字(arg1.tostring。替换(,r2 = number (arg2.tostring)。替换(,返回(r1和r2)* pow(10,t2-t1);}}增加div类型数量的方法,调用更方便。number . prototype . div = function(arg){ returns accdiv(this,arg);}熟悉乘法函数,乘法准确描述:当两个浮点乘法比较明显时,会出现错误,这个函数会返回比较准确的乘法结果。//tel: accmul(arg1,arg 2)//返回值:arg1乘以2精确结果函数accmul(arg1,arg2){ var m = 0,s1,s2 = = arg 1 . tostringarg 2 . tostring;请尝试{m = s1.split(,){1}。length}追到(e){}试试{m = s2.split(,){1}。长的度}赶上(e){}号(s1.replace(。}一种改进多/数字类型的方法,调用起来更方便。number . prototype . mul = function(arg){ returns accmul(arg,this);} check: console.log(accadd(1.79,0.12));/ / 1.91 console.log(accsub(2.01,0.12));/ / 1.89 console.log(accdiv(0.69,10));/ / 0.069console.log(accmul(1.01,1.3));//1.313改造后可以愉快地操作运算的内容~加减乘除。希望对大家有帮助,支持你。
了解更多javascript浮点数(js浮点计算精度问题)相关内容请关注本站点。
其它类似信息

推荐信息