目录
实现方式1
实现方式2
本博客讲述了两种计算方式及其代码的实现,并在最后对比了两种方法的结果差异。
比较结果显示,不同的实现方式之间可能存在数值误差。
实现方式1
具体计算步骤如下:
- 数值取整数部分得到度 108.5745800204 --> 108度
- 取小数部分乘以60得到分 0.5745800204*60 --> 34.474801224000004 --> 34
- 取分的小数部分乘以60得到秒 0.474801224000004 * 60 --> 28.488073440000242
实例代码:
def float2dfm(f):du = int(f)fen = int((f-du)*60)miao = ((f-du)*60-fen)*60return str(du) +'°'+ str(fen) + '′' + str(miao) + "″"
float2dfm(108.5745800204)
运行上述代码得到的转换效果为:
108°34′28.48807344002239″
实现方式2
具体计算步骤如下:
- 数值取整数部分得到度 108.5745800204 --> 108度
- 取小数部分乘以60得到分 0.5745800204*60 --> 34.474801224000004 --> 34
- 度小数部分-分的小数值,再乘以3600 (108.5745800204 - 108 - 34/60) *3600--> 28.488073440022443
实现代码:
def float2dfm1(f):du = int(f) # 取整数部分得到度fen = int((f-du)*60) # 小数部分乘以60得到分miao = (f - du - fen/60)*3600 # 度分转化为小数的剩余部分乘以3600return str(du) +'°'+ str(fen) + '′' + str(miao) + "″"
float2dfm1(108.5745800204)
运行上述代码得到的转换效果为:
108°34′28.488073440022443″
比较分析:
计算了一组数据的计算结果,对比其精度:
原始值 | 方法1 | 方法2 |
108.5746685377 | 108°34′28.806735720022516″ | 108°34′28.80673572002257″ |
108.5746386329 | 108°34′28.699078440016592″ | 108°34′28.699078440016645″ |
108.5745800204 | 108°34′28.48807344002239″ | 108°34′28.488073440022443″ |
两种方法,在pyton实现时,在秒小数位的第12位之后有数值误差。