JS加減乘除運算精度缺失問題

2021-09-29 02:56:25 字數 1041 閱讀 8783

計算機在計算時會把數字轉化為二進位制來計算,此時只能模仿十進位制進行四捨五入,但是二進位制只有 0 和 1 兩個,於是變為 0 舍 1 入。這是浮點數運算時出現誤差,丟失精度的原因。

為了解決這些問題,我們可以把浮點數乘以乙個數,時期變為整數再進行運算,之後再除以這個數,恢復原來的大小來解決浮點數計算精度缺失的問題,下面是我總結的一些**,可以直接拿來當模板用。

// 加法

numadd (num1, num2) catch (e)

try catch (e)

basenum = math.pow(10, math.max(basenum1, basenum2))

return math.round(num1 * basenum + num2 * basenum) / basenum

},// 減法

accsub (num1, num2) catch (e)

try catch (e)

m = math.pow(10, math.max(r1, r2))

n = (r1 >= r2) ? r1 : r2

return (math.round(num1 * m - num2 * m) / m).tofixed(n)

},// 乘法

accmul (num1, num2) catch (e)

try catch (e)

return number(s1.replace('.', '')) * number(s2.replace('.', '')) / math.pow(10, m)

},// 除法

accdiv (num1, num2) catch (e)

try catch (e)

r1 = number(num1.tostring().replace('.', ''))

r2 = number(num2.tostring().replace('.', ''))

return (r1 / r2) * math.pow(10, t2 - t1)

}

js 加減乘除精度問題

一。加法精度修改後如下 function add val for let i 0 i val.length i return count math.pow 10,max 使用 add 0.1,0.2,0.3,0.4 1。可以傳多個引數進行相加。二。減法精度修改後如下 function sub val...

js加減乘除運算(避免精度丟失)

加法函式 function accadd arg1,arg2 catch e try catch e m math.pow 10,math.max r1,r2 return arg1 m arg2 m m 給number型別增加乙個add方法,使用時直接用 add 即可完成計算。number.pro...

高精度加減乘除

一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...