function ConvertDDToDMS(D, lng) {
return {
dir: D < 0 ? (lng ? "W" : "S") : lng ? "E" : "N",
deg: 0 | (D < 0 ? (D = -D) : D),
min: 0 | (((D += 1e-9) % 1) * 60),
sec: (0 | (((D * 60) % 1) * 6000)) / 100,
};
}
以上为您提供了一个对象{deg, min, sec, dir}
,其 sec 被截断为两位数(例如3.14
),而 dir 为 , , 之一N
,E
具体S
取决于W
您是否将lng
(longitude) 参数设置为 true。例如:
ConvertDDToDMS(-18.213, true) == {
deg : 18,
min : 12,
sec : 46.79,
dir : 'W'
}
或者,如果您只想要基本字符串:
function ConvertDDToDMS(D){
return [0|D, 'd ', 0|(D=(D<0?-D:D)+1e-4)%1*60, "' ", 0|D*60%1*60, '"'].join('');
}
ConvertDDToDMS(-18.213) == `-18d 12' 47"`
[编辑 2019 年 6 月] - 修复了一个 8 年前的错误,该错误有时会由于浮点数学在转换精确分钟时导致结果延迟 1 分钟,例如ConvertDDToDMS(4 + 20/60)
.
[编辑 2021 年 12 月]——哎呀。修复 #2。回到原始代码并添加1e-9
到 a) 将任何稍低的浮点错误提高到下一个最高数字的值,并且 b) 小于.01
sec,因此对输出没有影响。添加1e-4
到相同修复的“字符串”版本中,但也舍入秒(接近 1/2 秒)。