如何在JavaScript中用纯数学运算实现0-100到20倍数的映射函数?
仅通过数学运算实现区间映射函数(JavaScript)
当然可以!我们可以利用向下取整和基本算术运算来实现这个需求,完全不需要条件判断或者分支语句。
实现代码
function getStepValue(num) { return Math.floor(num / 20) * 20; }
工作原理拆解
这个函数的逻辑非常直观,分三步完成映射:
- 缩小数值区间:将输入的
num除以20,把0-100的范围压缩到0-5的范围(比如19→0.95,20→1,39→1.95,100→5) - 向下取整:用
Math.floor()对缩小后的结果取整,这样所有区间内的数都会被映射到对应的整数(0.95→0,1.95→1,以此类推) - 还原区间:将取整后的结果乘以20,把数值还原回你需要的目标值(0→0,1→20,5→100)
边界情况验证
我们来测试几个关键输入,确认结果符合要求:
- 输入
0→Math.floor(0/20)*20 = 0✔️ - 输入
19→Math.floor(19/20)*20 = 0✔️ - 输入
20→Math.floor(20/20)*20 = 20✔️ - 输入
39→Math.floor(39/20)*20 = 20✔️ - 输入
100→Math.floor(100/20)*20 = 100✔️
可选:输入范围限制
如果需要处理超出0-100的输入(比如用户输入负数或者大于100的数),可以用数学运算额外做个边界限制:
function getStepValue(num) { const mapped = Math.floor(num / 20) * 20; return Math.max(0, Math.min(100, mapped)); }
这样输入-5会返回0,输入105会返回100,依然保持纯数学运算的实现方式。
内容的提问来源于stack exchange,提问作者Sabau Mihai
相关产品推荐
相关产品推荐

