PHP中如何将[24,0]范围整数映射为[10,0]区间整数
区间映射核心实现逻辑
线性映射的本质是对齐两个区间的相对位置:原输入的满量程值(24)对应目标输出的满量程值(10),原输入的最小值(0)对应目标输出的最小值(0),两个区间方向一致,无需做反转处理。
计算逻辑拆解:
- 计算缩放比例:目标区间总长度 / 原区间总长度 = (10 - 0) / (24 - 0) = 5/12
- 原输入值乘以缩放比例,即可得到对应目标区间的浮点数值
- 对浮点结果做取整处理,同时做边界校验,避免计算偏差、异常输入导致的结果溢出
PHP 可落地实现代码
代码包含输入边界截断、线性计算、取整、输出边界校验全流程,可直接复用:
function rangeMap(int $originNum): int { // 原输入边界截断:保证输入不会超出0-24的约定范围 $safeOrigin = max(0, min(24, $originNum)); // 线性映射计算 $scaled = $safeOrigin * (10 / 24); // 取整:可根据需求替换为floor()向下取整、ceil()向上取整 $intResult = (int)round($scaled); // 输出边界截断:消除浮点计算带来的微小偏差,保证输出落在0-10区间 return max(0, min(10, $intResult)); }
常见场景映射效果参考
基于四舍五入取整的典型测试结果:
- 原输入0 → 输出0
- 原输入12 → 输出5
- 原输入24 → 输出10
- 原输入3 → 输出1
- 原输入6 → 输出3
注:如果需要调整映射的取整规则,仅需替换取整函数即可,核心缩放逻辑无需改动。
内容的提问来源于stack exchange,提问作者Brian Kiplagat
相关产品推荐
相关产品推荐

