Decimal Degrees转Sexagesimal Degrees代码结果异常求助
十进制转六十进制(度分秒)代码问题排查与修复
问题根源
你的代码出现结果偏差有两个核心原因:
- 参数传入错误:调用
dec_dms(12,345)时,第二个参数传了整数345,但它应该是十进制度数的小数部分(即0.345),而非小数位的数值。 - 逻辑冗余且易出错:手动通过减法分离整数和小数部分的写法不够严谨,不如直接取整更可靠。
修复方案
方案1:接收完整十进制度数值(推荐)
将函数改为直接接收完整的十进制度数,避免拆分参数时出错,逻辑更直观:
import math def dec_to_dms(deg_decimal): # 提取整数度 deg = math.floor(deg_decimal) # 计算剩余小数部分 dec_part = deg_decimal - deg # 转换为分,提取整数分 mnt_total = dec_part * 60 mnt = math.floor(mnt_total) # 剩余部分转换为秒,四舍五入取整 sec = round((mnt_total - mnt) * 60) return deg, mnt, sec # 正确调用:传入完整的十进制度数12.345 print(dec_to_dms(12.345))
运行结果:(12, 20, 42)
方案2:保留原参数形式
如果坚持要分开传入度的整数部分和小数部分,只需修正参数传入值,并优化取整逻辑:
def dec_dms(deg, dec): # 小数部分转分 mnt_total = dec * 60 # 提取整数分 mnt = int(mnt_total // 1) # 剩余部分转秒,四舍五入 sec = round((mnt_total - mnt) * 60) return deg, mnt, sec # 正确调用:第二个参数传入小数部分0.345 print(dec_dms(12, 0.345))
运行结果:(12, 20, 42)
补充说明
- 浮点运算可能存在精度误差,因此对秒数做
round()处理,确保结果符合实际的度分秒表示。 - 使用
math.floor或整数除法//提取整数部分,比手动减法更简洁且不易出错。
内容的提问来源于stack exchange,提问作者HellSpace
相关产品推荐
相关产品推荐

