为什么一些舍入的JavaScript值绕错了?

时间:2015-05-11 16:29:31

标签: javascript math rounding

我在谷歌搜索1小时半后尝试了很多脚本,并且所有脚本都给了我错误的舍入数字或错误的值。这是我试过的两个脚本。

FIRST TRY:
    Number.prototype.round = function(p) {
      p = p || 10;
      return parseFloat( this.toFixed(p) );
    };


SECOND TRY:
    function roundNumber(number, decimals) { 
        var newnumber = new Number(number+'').toFixed(parseInt(decimals));
        return  parseFloat(newnumber);
    }

我从两者获得的一些示例输出:

0.22  ->  0.21480000000000005 (bad) should be 21
0.43  -> 0.4284 (good) 43 is right

我做错了什么?任何帮助都会受到赞赏,因为这让我捅了太久。

1 个答案:

答案 0 :(得分:2)

为什么不使用这样的东西:

Math.round(yourNumber * 100) / 100;

这会将它四舍五入到小数点后两位,同样的问题在这里或多或少得到了解答 - Round to at most 2 decimal places (only if necessary)

以下是一个小例子

function round(num){
    var result = Math.round(num * 100) / 100;
    return console.log(result);
}

round(0.4284);

小提琴在这里测试:https://jsfiddle.net/ToreanJoel/bLzz2mL8/