黃聰:JS數學計算精度修正
阿新 • • 發佈:2018-08-01
function 浮點數 turn 計算 filesize add follow fun his
偌!瀏覽器告訴我,他就是算不對,這要是給客戶算錢,客戶不就有意見了....
WHY?計算機計算出來的還不如我自己的心算呢!!!!
如果你想了解什麽原因,您請看=>js浮點數精度問題的前世今生?
作者:小楓學幽默
鏈接:https://www.jianshu.com/p/c3374517b976
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
問題描述
如果我問你,4330.61乘以100等於多少,我猜你肯定跟我說:“肯定是 433061”啊!
是啊,要我我也是這麽回答,來來來我們來看看瀏覽器怎麽說吧,如下圖
瀏覽器告訴我,他就是算不對
偌!瀏覽器告訴我,他就是算不對,這要是給客戶算錢,客戶不就有意見了....
WHY?計算機計算出來的還不如我自己的心算呢!!!!
如果你想了解什麽原因,您請看=>js浮點數精度問題的前世今生?
解決辦法
;(function(){
function mathService(){
this.add=function(a,b){
var c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) + this.mul(b, e)) / e;
}
this.mul=function(a, b) {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
this.sub=function(a,b){
var c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) - this.mul(b, e)) / e;
}
this.div=function(a, b) {
var c, d, e = 0,
f = 0;
try {
e = a.toString().split(".")[1].length;
} catch (g) {}
try {
f = b.toString().split(".")[1].length;
} catch (g) {}
return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), this.mul(c / d, Math.pow(10, f - e));
}
}
window.mathService=new mathService()
})(window);
來來來,用起來
image.pngOk!寫完收工!!!
作者:小楓學幽默
鏈接:https://www.jianshu.com/p/c3374517b976
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
黃聰:JS數學計算精度修正