更新 :
因此,无论如何,四舍五入的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);}


