search

Home  >  Q&A  >  body text

javascript - js中1-0.55=0.44999999999999996怎么解决

如题 今天在使用js进行数据自动结算时出现这样的结果

bjObj.val(parseFloat(1-parseFloat(xzObj.val())));

就是通过这个代码来计算的 结果1-0.55 的0.44999999999999996

请大神讲解说明如果能够修复更好
runjs代码库

天蓬老师天蓬老师2903 days ago374

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:16:06

    用toFixed()来选择保留几位小数

    var number = 0.3 - 0.2      //    0.09999999999999998
    number.toFixed(2)           //    "0.10"
    typeof number.toFixed(2)    //    "string"
    number = +number.toFixed(2) //    0.1
    

    也可以用这个big.js

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:16:06

    如果要做到精确,那先定义好要保留小数点后几位,即精确到10的 k 次方分位。小数点右边第一位是十分位,第二位是百分位。假设要保留小数点后两位,就是精确到百分位,那么先把结果乘以100,再四舍五入取整,再除以100。

    Math.round(parseFloat(1 - 0.55) * 100) / 100
    

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:16:06

    如同0.1 + 0.2 不等于0.3一样,这是数值的精度问题,你可以考虑下乘以某个数值例如1000然后再运算,也可以对结果 toFixed ,还可以用 https://github.com/MikeMcl/bignumber.js

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:16:06

    这东西是js自身的精度问题,我的做法是:
    ((1-0.55)+1e-6).toFixed(2) // 2或几 看你的需求
    1e-6 是0.000001 //这里的6或几 也是看你的需求

    reply
    0
  • Cancelreply