Skip to content

在JavaScript中将数字限制在范围内

将数字限制在特定范围内意味着将其限制在某个范围内。将数字映射到范围意味着将其从一个范围转换为另一个范围。这两个操作在JavaScript中很常见,可以使用简单的数学运算轻松实现。

限制数字

为了限制数字,您可以使用Math.max()Math.min()来找到指定范围内的最接近的值

const clampNumber = (num, a, b) =>
  Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));

clampNumber(2, 3, 5); // 3
clampNumber(1, -1, -5); // -1

将数字转换为安全整数

限制数字的一个特殊情况是将其转换为安全整数。您可以使用Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER常量来找到最接近的安全值。此外,使用Math.round()将其转换为整数。

const toSafeInteger = num =>
  Math.round(
    Math.max(Math.min(num, Number.MAX_SAFE_INTEGER), Number.MIN_SAFE_INTEGER)
  );

toSafeInteger('3.2'); // 3
toSafeInteger(Infinity); // 9007199254740991

将数字映射到一个范围

将数字映射到一个范围是一个简单的线性变换。提供原始范围和目标范围,你可以在两个范围的限制之间进行映射。

const mapNumRange = (num, inMin, inMax, outMin, outMax) =>
  ((num - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;

mapNumRange(5, 0, 10, 0, 100); // 50