第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

精度問題

標(biāo)簽:
JavaScript

之前的项目里涉及到了金额的计算,要求保留两位小数或4位小数,一直是采用原生的Number对象的原型对象上的toFixed()方法来计算的。直到有一天测试提了Bug,反复验证后发现,用 tofixed 来保留n位小数在某种情况下确实会出精度问题,真叫人头大 (ÒωÓױ)!!!

下面进行测试

1234567891011121314151617let num = 1.234num.toFixed(2) //1.23 正确 let num = 1.235num.toFixed(2) //1.24 正确 let num = 1.236num.toFixed(2) //1.24 正确 let num = 0.234num.toFixed(2) //0.23 正确 let num = 0.235num.toFixed(2) //0.23 错误 X let num = 0.236num.toFixed(2) //0.24 正确

也就是说,当num < 0 ,且需要判断是否进位的那位是5时,这一位会错误的没有进上。这只是通过现象归纳的bug原因,归根结底还是二进制浮点数的精度不够导致的。

可以用 $toFixed(num,n) 方法来代替num.toFixed(n) :

< ps. 暂时还没发现问题,灰常滴好用 >

$tofixed (num, n) {
    var symbol = 1
    if (num < 0) {
        // 符号为负
        symbol = -1
        num *= -1
    }
    var num2 = (Math.round(num * Math.pow(10, n)) 
    / Math.pow(10, n) + Math.pow(10, -(n + 1)))
    .toString().slice(0, -1)
    return parseFloat(num2 * symbol).toFixed(n)
}


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消