JS的toFixed方法问题

问题:公式中,输入端口利用率 = (输入总流量/带宽)*100,而在前端计算时,输入总流量为726Mbps,带宽为10GE,于是端口利用率计算为(726/(1024*10)).toFixed(2)*100,结果却是7.000000000000001,完全跟预期的不一样,但是其他的数据相同的方法却是整数,百思不得其解。

方法:经过查询各种资料,最后找到方法改成((100*726)/(1024*10)).toFixed(0),结果就得到我想要的了。原来toFixed()得到的数据类型是string,再进行*100时就隐式转为number类型,而浮点数在计算机里是不能精确表达的,所以显示时就截取了部分显示,导致与预期的不一致。所以在计算的时候,特别是浮点数最好先通过数字进行计算完后,再通过toFixed()进行转换。

拓展:查找资料时,还发现toFixed()存在chrome和Firefox四舍五入兼容等问题,如chrome44/firefox41 里对于最后一位是 5 的有时没有进位,需要对方法进行重写,如修改最后一位为6等。(来自网络的方法,未测试)

function toFixed(number, precision) {
    var str = number + ''
    var len = str.length
    var last = str.substr(len-1, len)
    if (last == '5') {
        last = '6'
        str = str.substr(0, len-1) + last
        return (str - 0).toFixed(precision)  
    } else {
        return number.toFixed(precision)
    }
}

猜你喜欢

转载自blog.csdn.net/lanyue1/article/details/81273293