为什么js里面有些数字*100结果会不准确?

想实现输入的是一个小数,输出一个百分数
代码如下:

app.filter("rateFilter", function () {    return function (rate) {        var clickRate = rate;        console.log(clickRate);        var result = clickRate * 100 + "%";        console.log(result);        return result;
    }
})

结果输出的部分数据不正常:
https://img2.mukewang.com/5b9dfe390001a1b503080601.jpg

是什么原因导致的呢?


拉莫斯之舞
浏览 2460回答 1
1回答

慕虎7371278

舍入误差,具体的参考一下浮点数的计算方法就知道是怎么回事儿了。如果不是有特殊的精度要求,我一般会对可能出现误差的情况做点简单处理。//按照有效数字位数进行四舍五入,默认6位有效数字Math.signFigures&nbsp;=&nbsp;function(num,&nbsp;rank&nbsp;=&nbsp;6)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;if(!num)&nbsp;return(0);&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;sign&nbsp;=&nbsp;num&nbsp;/&nbsp;Math.abs(num);&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;number&nbsp;=&nbsp;num&nbsp;*&nbsp;sign;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;temp&nbsp;=&nbsp;rank&nbsp;-&nbsp;1&nbsp;-&nbsp;Math.floor(Math.log10(number));&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;ans;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp&nbsp;>&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;parseFloat(number.toFixed(temp)); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(temp&nbsp;<&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;Math.round(number&nbsp;/&nbsp;Math.pow(10,&nbsp;temp))&nbsp;*&nbsp;temp; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;Math.round(number); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(ans&nbsp;*&nbsp;sign); };0.56&nbsp;*&nbsp;100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//56.00000000000001Math.signFigures(0.56&nbsp;*&nbsp;100);&nbsp;&nbsp;//560.2&nbsp;+&nbsp;0.1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0.30000000000000004Math.signFigures(0.2&nbsp;+&nbsp;0.1);&nbsp;&nbsp;&nbsp;//0.31.09&nbsp;*&nbsp;100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//109.00000000000001Math.signFigures(1.09&nbsp;*&nbsp;100);&nbsp;&nbsp;//109
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript