我必须非常正确地计算出不同点之间的高程。这意味着它们应尽可能正确。可悲的是,我用浮点数完成了完整的脚本。现在,在最终的高程计算中,我得到了错误的高度信息。我已经阅读了很多有关浮动问题的内容,但可悲的是,我找不到任何解决方法。有人说我应该将我的浮点数四舍五入然后再使用它,还有一些人说我应该使用十进制。遗憾的是,实际上并没有一个来源可以找到最适合我的问题的最佳解决方案。
我的海拔值(变量ListOfValues)是:
195,1850
195,1550
195,1625
195,1400
195,1350
195,0925
195,1050
195,0800
195,0825
195,0625
195,0650
195,0350
195,0425
这是我的代码:
for i in range(0, len(ListOfValues)-1):
Elevation = Elevation + abs(ListOfValues[i] - ListOfValues[i+1])
for i in range(0, len(ListOfValues)-2):
if ListOfValues[i]<ListOfValues[i+1]:
ElevationUpwards=ElevationUpwards+(ListOfValues[i+1] - ListOfValues[i])
if ListOfValues[i]>ListOfValues[i+1]:
ElevationDownwards=ElevationDownwards+(ListOfValues[i] - ListOfValues[i+1])
我没有通过0,0325
来获取0.024999999999977263
的向上仰角值。差异对我来说太大了。
在下面找到Python的计算:
195.185-195.155=0.030000000000001137
195.1625-195.155=0.007499999999993179
195.1625-195.14=0.052500000000009095
195.14-195.135=0.05750000000000455
195.135-195.0925=0.09999999999999432
195.105-195.0925=0.01999999999998181
195.105-195.08=0.12499999999997158
195.0825-195.08=0.022499999999979536
195.0825-195.0625=0.1449999999999818
195.065-195.0625=0.024999999999977263
195.065-195.035=0.17499999999998295
您建议什么来尽可能接近“真实”海拔值?
编辑: 虽然建议使用十进制方式,但我尝试了这种方式。我的代码现在是:
Elevation=Decimal(0.0)
ElevationUpwards=Decimal(0.0)
ElevationDownwards=Decimal(0.0)
for i in range(0, len(ListOfValues)-1):
Elevation = Elevation + abs(Decimal(ListOfValues[i]) - Decimal(ListOfValues[i+1]))
for i in range(0, len(ListOfValues)-1):
if ListOfValues[i]<ListOfValues[i+1]:
ElevationUpwards=ElevationUpwards+(Decimal(ListOfValues[i+1]) - Decimal(ListOfValues[i]))
if ListOfValues[i]>ListOfValues[i+1]:
ElevationDownwards=ElevationDownwards+(Decimal(ListOfValues[i]) - Decimal(ListOfValues[i+1]))
现在,此代码的结果再次为:0.03249999999997044142219237984
我做错了什么吗?
答案 0 :(得分:1)
这是您要编写的代码。
如果您可以首先发布此代码,那就太好了。
ListOfValues = [195.1850,
195.1550,
195.1625,
195.1400,
195.1350,
195.0925,
195.1050,
195.0800,
195.0825,
195.0625,
195.0650,
195.0350,
195.0425]
Elevation = 0 # Elevation is not used after the loops
ElevationUpwards = 0
ElevationDownwards = 0 # ElevationDownwards is not used after the loops
for i in range(0, len(ListOfValues)-1):
Elevation = Elevation + abs(ListOfValues[i] - ListOfValues[i+1])
for i in range(0, len(ListOfValues)-1): # Changed this to -1 instead of -2 as posted
if ListOfValues[i]<ListOfValues[i+1]:
ElevationUpwards=ElevationUpwards+(ListOfValues[i+1] - ListOfValues[i])
if ListOfValues[i]>ListOfValues[i+1]:
ElevationDownwards=ElevationDownwards+(ListOfValues[i] - ListOfValues[i+1])
print(ElevationUpwards)
输出:
0.03249999999997044
这似乎是您正在寻找的价值。
您编写的代码具有正确的缩进形式,但是产生了错误的0.0245
值。
更新:
您始终可以在计算之前修正您的值,然后在之后更正结果:
ListOfValues=[int(v*10000) for v in ListOfValues]
# Then do the calculations
print(ElevationUpwards/10000)
输出:
0.0325