如何将0-1区间内的数值按指定网格大小对齐到对应网格点
0~1区间数值按指定网格大小对齐实现方案
核心规则说明
设指定的网格大小为m:
- 相邻网格点的固定间隔为
step = 1/(m-1) - 所有可对齐的网格点为
k * step,其中k为取值范围在0 ~ m-1的整数,总共有m个点,和需求示例完全匹配:- m=2时,step=1,对应点
0、1 - m=3时,step=0.5,对应点
0、0.5、1 - m=4时,step≈0.333,对应点
0、0.33、0.66、1
- m=2时,step=1,对应点
对齐算法步骤
- 将输入的0~1区间数值
x除以间隔step,得到商值 - 对商值做四舍五入取整,得到对应网格点的索引
k - 对
k做边界裁剪,限制在0 ~ m-1区间内,避免浮点数精度问题导致结果超出0或1的范围 - 最终对齐结果为
k * step,如果需要保留2位小数可以额外做精度处理
代码示例(Python)
def align_to_grid(x: float, grid_size: int, decimal: int = None) -> float: if grid_size < 2: raise ValueError("网格大小不能小于2") if not 0 <= x <= 1: raise ValueError("输入数值必须在0~1区间内") step = 1 / (grid_size - 1) k = round(x / step) # 边界裁剪避免越界 k = max(0, min(k, grid_size - 1)) res = k * step return round(res, decimal) if decimal else res
测试用例效果
- 输入
x=0.3,grid_size=2,返回1.0 - 输入
x=0.2,grid_size=3,返回0.0;输入x=0.6,grid_size=3,返回0.5 - 输入
x=0.5,grid_size=4,decimal=2,返回0.67(如果要截断为0.66可以调整取整逻辑为int向下取整)
内容的提问来源于stack exchange,提问作者JSmith
相关产品推荐
相关产品推荐

