5
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 的增量增加,但以 25 结尾或数组 C 中的 75。我有数组 A 中的数字,我需要与卫星数据的网格相匹配。我需要对数组 A 中的数字进行舍入或转换,使其看起来像数组 B 中的数字。

我已经尝试过使用round和使用math.ceil,但都没有完全工作。

4

2 回答 2

1

这是一个舍入算法:

  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

于 2019-11-14T12:57:22.833 回答
0

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

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))))

于 2019-11-14T19:56:12.703 回答