以 0.025 或 0.075 结尾的数字四舍五入到最接近的 0.05

Round a number to the nearest 0.05 ending with either a 0.025 or 0.075

A = [0.123 0.234 0.562 0.665 ]
B = [0.125 0.225 0.575 0.675]
C = [-43.975 -43.925 -43.875 -43.825 -43.775 -43.725 -43.675]

我想让数组 A 看起来像数组 B。我正在使用的卫星数据具有 0.05 度的分辨率,因此它的纬度和经度值的编号与数组 C 中的一样。因此数字以 0.05 的增量增加但在数组 C 中以 25 或 75 结尾。我有数组 A 中的数字,我需要将其与卫星数据的网格相匹配。我需要像数组 A 中那样舍入或转换我的数字,使其看起来像数组 B 中的数字。

我试过使用 roundmath.ceil 但都没有完全奏效。

这是一个舍入算法:

  1. 加 0.025
  2. 乘以 20
  3. 四舍五入到最接近的整数
  4. 除以 20
  5. 减去 0.025
  6. 四舍五入到小数点后 3 位(以处理浮点精度问题)

例如在 python:

def x_round(x): return round((round((x+0.025)*20)/20)-0.025,3);

A = [0.123, 0.234, 0.562, 0.665]

for item in A:
    print(x_round(item))

输出:

0.125
0.225
0.575
0.675


这是一个寻找以 0.025 或 0.075 结尾的最近邻居的版本。 (处理负输入留给 reader。)

JavaScript代码:

function f(n){
  n = n * 1000
  let m = n % 100
  if (m <= 50)
    return (n - m + 25) / 1000
  else
    return (n - m + 75) / 1000
}

var A = [0.123, 0.234, 0.562, 0.665]

console.log(JSON.stringify(A))
console.log(JSON.stringify(A.map(x => f(x))))