我试图将十进制数字 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/