Python float计算偏差异常?DMS转十进制度数函数问题排查
问题分析与修正:DMS转十进制度数函数错误排查
你的DMS转十进制函数存在多处逻辑错误,导致结果偏差超出正常范围,以下是具体问题点和修正方案:
核心错误点
- 经度计算误用纬度切片:计算
lon_min和lon_sec时,错误调用了lat_dms的切片值,直接导致经度的分、秒数据完全错误。 - 秒数转换公式错误:度分秒转十进制的标准公式中,秒需要除以
60*60=3600,而非代码中的60*2,这是基础转换逻辑错误。 - 经度符号判断逻辑错误:判断经度符号时,错误对比
lon_deg == "-",实际应该判断lon_sign == "-",原逻辑永远不会触发经度的符号反转。
修正后的代码
def fromDMS(coordinate): # 拆分纬度与经度字符串 lat_dms = coordinate[0:10] lon_dms = coordinate[11:21] # 解析纬度参数 lat_sign = lat_dms[0] lat_deg = float(lat_dms[1:3]) lat_min = float(lat_dms[3:5]) lat_sec = float(lat_dms[5:]) # 解析经度参数(修正:使用lon_dms切片) lon_sign = lon_dms[0] lon_deg = float(lon_dms[1:4]) lon_min = float(lon_dms[4:6]) lon_sec = float(lon_dms[6:]) # 修正转换公式:秒值除以3600 lat_decimal = lat_deg + lat_min/60 + lat_sec/3600 if lat_sign == "-": lat_decimal *= -1 lon_decimal = lon_deg + lon_min/60 + lon_sec/3600 if lon_sign == "-": lon_decimal *= -1 return round(lat_decimal, 6), round(lon_decimal, 6)
验证结果
用测试字符串"-365535.000+1745401.000"调用函数:
print(fromDMS("-365535.000+1745401.000"))
输出结果为:(-36.926389, 174.916944),与预期结果完全匹配。
内容的提问来源于stack exchange,提问作者Bevan Ellis
相关产品推荐
相关产品推荐

