我试图将十进制数字 chop 到小数位。像这样:

5.467   -> 5.46
985.943 -> 985.94
toFixed(2)可以做正确的事,但是会四舍五入该值。我不需要四舍五入的值(value)。希望这是可能的JavaScript。

最佳答案

更新了:

因此,无论如何,四舍五入的bug总是会困扰着您,无论您如何努力补偿它们。因此,应该通过精确地用十进制表示法来解决该问题。

Number.prototype.toFixedDown = function(digits) {
    var re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
        m = this.toString().match(re);
    return m ? parseFloat(m[1]) : this.valueOf();
};

[   5.467.toFixedDown(2),
    985.943.toFixedDown(2),
    17.56.toFixedDown(2),
    (0).toFixedDown(1),
    1.11.toFixedDown(1) + 22];

// [5.46, 985.94, 17.56, 0, 23.1]

旧的易于出错的解决方案基于其他人的编译:
Number.prototype.toFixedDown = function(digits) {
  var n = this - Math.pow(10, -digits)/2;
  n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
  return n.toFixed(digits);
}

关于javascript - chop (不舍入)JavaScript中的十进制数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4912788/

10-11 07:06