在JavaScript中修復(fù)“0.1 + 0.2 = 0.300000004”

由于JavaScript 對Math使用IEEE 754 標(biāo)準(zhǔn),因此它使用64位浮點(diǎn)數(shù)。這在執(zhí)行浮點(diǎn)(十進(jìn)制)計算時會導(dǎo)致精度錯誤,簡而言之,由于計算機(jī)是二進(jìn)制運(yùn)算,而不是十進(jìn)制。

0.1 + 0.2; // 0.300000004 
// 0.1 ===> 0.0001100110011001100110011001100110011001100110011001101     
// 0.2 ===> 0.001100110011001100110011001100110011001100110011001101
// 連個二進(jìn)制相加 ===> 0.0100110011001100110011001100110011001100110011001100111 轉(zhuǎn)換為十進(jìn)制 0.30000000000000004
// 就是因為0.0100110011001100110011001100110011001100110011001100111最后的一位1 導(dǎo)致0.00000000000000004
image.png

image.png

這個問題的一個簡單的解決方案是:

+(0.1 + 0.2).toFixed(1); // 0.3 (保留小數(shù)點(diǎn)后一位)

這里的數(shù)字加在一起,返回錯誤的浮點(diǎn)數(shù),然后將其設(shè)置toFixed為字符串"0.3"。最后,+符號將字符串轉(zhuǎn)換回有效狀態(tài),Number以便可以再次處理它。

var x = 0.1,
    y = 0.2;
var z = +(x + y).toFixed(1);
z += 0.1; // z is now 0.4
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容