Math.floor()

基线 广泛可用

此功能已得到充分确立,并且可以在许多设备和浏览器版本上运行。它自以下时间起在所有浏览器中都可用 2015 年 7 月.

Math.floor() 静态方法始终向下舍入并返回小于或等于给定数字的最大整数。

试一试

语法

js
Math.floor(x)

参数

x

一个数字。

返回值

小于或等于x的最大整数。它与-Math.ceil(-x)的值相同。

描述

因为floor()Math的静态方法,所以你始终将其用作Math.floor(),而不是作为你创建的Math对象的某一方法(Math不是构造函数)。

示例

使用 Math.floor()

js
Math.floor(-Infinity); // -Infinity
Math.floor(-45.95); // -46
Math.floor(-45.05); // -46
Math.floor(-0); // -0
Math.floor(0); // 0
Math.floor(4); // 4
Math.floor(45.05); // 45
Math.floor(45.95); // 45
Math.floor(Infinity); // Infinity

小数调整

在此示例中,我们实现了一个名为decimalAdjust()的方法,它是Math.floor()Math.ceil()Math.round()的增强方法。虽然这三个Math函数始终将输入调整到个位数,但decimalAdjust接受一个exp参数,该参数指定应将数字调整到的小数点左侧的位数。例如,-1表示它将在小数点后保留一位数字(如“× 10-1”)。此外,它允许你通过type参数选择调整方式——roundfloorceil

它是通过将数字乘以 10 的幂,然后将结果舍入到最接近的整数,然后除以 10 的幂来实现的。为了更好地保持精度,它利用了 Number 的toString()方法,该方法以科学记数法(如6.02e23)表示大数或小数。

js
/**
 * Adjusts a number to the specified digit.
 *
 * @param {"round" | "floor" | "ceil"} type The type of adjustment.
 * @param {number} value The number.
 * @param {number} exp The exponent (the 10 logarithm of the adjustment base).
 * @returns {number} The adjusted value.
 */
function decimalAdjust(type, value, exp) {
  type = String(type);
  if (!["round", "floor", "ceil"].includes(type)) {
    throw new TypeError(
      "The type of decimal adjustment must be one of 'round', 'floor', or 'ceil'.",
    );
  }
  exp = Number(exp);
  value = Number(value);
  if (exp % 1 !== 0 || Number.isNaN(value)) {
    return NaN;
  } else if (exp === 0) {
    return Math[type](value);
  }
  const [magnitude, exponent = 0] = value.toString().split("e");
  const adjustedValue = Math[type](`${magnitude}e${exponent - exp}`);
  // Shift back
  const [newMagnitude, newExponent = 0] = adjustedValue.toString().split("e");
  return Number(`${newMagnitude}e${+newExponent + exp}`);
}

// Decimal round
const round10 = (value, exp) => decimalAdjust("round", value, exp);
// Decimal floor
const floor10 = (value, exp) => decimalAdjust("floor", value, exp);
// Decimal ceil
const ceil10 = (value, exp) => decimalAdjust("ceil", value, exp);

// Round
round10(55.55, -1); // 55.6
round10(55.549, -1); // 55.5
round10(55, 1); // 60
round10(54.9, 1); // 50
round10(-55.55, -1); // -55.5
round10(-55.551, -1); // -55.6
round10(-55, 1); // -50
round10(-55.1, 1); // -60
// Floor
floor10(55.59, -1); // 55.5
floor10(59, 1); // 50
floor10(-55.51, -1); // -55.6
floor10(-51, 1); // -60
// Ceil
ceil10(55.51, -1); // 55.6
ceil10(51, 1); // 60
ceil10(-55.59, -1); // -55.5
ceil10(-59, 1); // -50

规范

规范
ECMAScript 语言规范
# sec-math.floor

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅