以 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 中的数字。
我试过使用 round
和 math.ceil
但都没有完全奏效。
这是一个舍入算法:
- 加 0.025
- 乘以 20
- 四舍五入到最接近的整数
- 除以 20
- 减去 0.025
- 四舍五入到小数点后 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))))
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 中的数字。
我试过使用 round
和 math.ceil
但都没有完全奏效。
这是一个舍入算法:
- 加 0.025
- 乘以 20
- 四舍五入到最接近的整数
- 除以 20
- 减去 0.025
- 四舍五入到小数点后 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))))