解決js進行四則運算時出現的小數尾差問題

2021-06-21 14:10:45 字數 1148 閱讀 3808

最近專案中用到js對資料進行運算,運算10.37-1.1-1.1=8.169999999999,讓我很是鬱悶,谷歌了一下發現這是乙個js本身對浮點運算的bug,不知道為什麼一直沒有修復。。。

一開始我如果僅對加法進行簡單的處理,即所有的數都乘以1000或10000得到整數在進行運算,但是在減法等中還是會有問題。要徹底解決這個bug,只有重新自己寫加減乘除的方法,如下:

乘法:

function accdiv(arg1, arg2) catch (e)

try catch (e)

with (math)

}除法:

function accmul(arg1, arg2) catch (e)

try catch (e)

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

}加法:

function accadd(arg1, arg2) catch (e)

try catch (e)

c = math.abs(r1 - r2);

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

if (c > 0)

else

}else

return (arg1 + arg2) / m

}減法:function accsub(arg1,arg2)catch(e)

trycatch(e)

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

//動態控制精度長度

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

return ((arg1*m-arg2*m)/m).tofixed(n);

}特別的是,你可以

給number型別增加四個方法,讓呼叫更加方便。

比如加法:

給number賦個add方法

number.prototype.add = function(arg)

計算3.4+2.1只需呼叫(3.4)add(2.1)即可。

SpringEL進行四則運算

在很多的業務場景中,復合指標的資料需要根據其他型別資料通過加減乘除運算計算得來,也就是先定義乙個公式,然後程式獲取相應的公式裡面的引數的值,進行計算,獲得結果 比如 公式 d a b c,現在知道a 2,b 4,c 3,那麼求d的值,怎麼辦呢?springel給出了乙個簡單的解決方案 import ...

js四則運算符

只有當加法運算時,其中一方是字串型別,就會把另乙個也轉為字串型別。其他運算只要其中一方是數字,那麼另一方就轉為數字。並且加法運算會觸發三種型別轉換 將值轉換為原始值,轉換為數字,轉換為字串。template section class p 10 el button type danger click...

四則運算的實現

繼續溫習資料結構.實現用到了兩個棧 運算元棧與操作符棧。主要過程是將中序表示式轉換為後續表示式,然後按順序進行運算。簡單過程 1 8 7 中序 1 8 7 後序 1 1 運算8 7 2 運算1 1 原始碼 include stack.h 利用到了前一篇文章實現的棧 define size 256 d...