js 使用parseInt保留兩位小數(shù)的坑

在js中,保留兩位小數(shù)的方法有很多種,在開發(fā) 快捎 項(xiàng)目時(shí),在一處數(shù)據(jù)處理中,使用了類似如下代碼:

var realPrice = 2.51;  //其中一個(gè)示例值
var targetPrice = parseInt(realPrice * 100) / 100;
console.log(">>>", targetPrice);

本來是為了確保把realPrice保留兩位小數(shù)后賦值給targetPrice, 但發(fā)現(xiàn)結(jié)果并不是這樣,在控制臺(tái)輸出如下:

image.png

不應(yīng)該是2.51么?
我把realPrice的值換成2.51111, 然后測試,結(jié)果輸出正常的2.51
怎么回事?不是說程序是不會(huì)騙人的嗎?
本著打破砂鍋問到底的好(zhuang)學(xué)(bi)心態(tài), 我做了如下的測試:

var realPrice = 2.51;  //其中一個(gè)示例值
console.log(parseInt(realPrice * 100))

得到結(jié)果依然是2.5。
繼續(xù)往下:

var realPrice = 2.51;  //其中一個(gè)示例值
console.log(realPrice * 100)

得到如下結(jié)果:


image.png

終于知道是何故了。

當(dāng)一個(gè)浮點(diǎn)數(shù)與任何Number數(shù)據(jù)進(jìn)行運(yùn)算時(shí),都可能會(huì)產(chǎn)生精度不準(zhǔn)確的問題,以上就是一個(gè)例子。而parseInt函數(shù)會(huì)直接把Number類型的數(shù)據(jù)進(jìn)行 舍尾 取值。自然而然地,parseInt(realPrice * 100)的結(jié)果是250了,最終```targetPrice``結(jié)果也就是2.5了。

提醒:js中凡是使用浮點(diǎn)數(shù)進(jìn)行運(yùn)算的,都應(yīng)該留意其精度產(chǎn)生的誤差,避免對(duì)計(jì)算結(jié)果造成影響!!!

? 解決方案

  1. parseInt函數(shù)替換成Math.round函數(shù)。
  2. 使用+realPrice.toFixed(2)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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