固定数字四舍五入 JavaScript

Fixed number rounding down in JavaScript

问题

我得到 1 到 5 之间的所有可能的浮点数。输出必须包含逗号后的两位数,如果是逗号后的数字,则需要向下舍入(下限)。

示例输入和输出:

我的尝试

我的尝试是对数字的 100 倍进行 Math.floor,然后除以去掉逗号后不需要的数字。 Number.toFixed(2) 让我得到可能丢失的零:

(Math.floor(input * 100) / 100).toFixed(2)

这个问题是 JavaScript 的浮点不精确:

Math.floor(4.14 * 100) / 100
// results in 4.13 because 4.14 * 100 is 413.99999999999994

function formatNumber(x) {
  // convert it to a string
  var s = "" + x;
  // if x is integer, the point is missing, so add it
  if (s.indexOf(".") == -1) {
    s += ".";
  }
 // make sure if we have at least 2 decimals
  s += "00";
  // get the first 2 decimals
  return s.substring(0, s.indexOf(".") + 3);
}

document.write(1 + " -> " + formatNumber(1) + "<br/>");
document.write(4.3 + " -> " + formatNumber(4.3) + "<br/>");
document.write(1.1000 + " -> " + formatNumber(1.1000) + "<br/>");
document.write(1.5999 + " -> " + formatNumber(1.5999) + "<br/>");
document.write(4.14 + " -> " + formatNumber(4.14) + "<br/>");

这是我的尝试,代码中记录了这个想法。当然,可能有更好的解决方案,但这是一个快速而肮脏的解决方案。