function ConvertDDToDMS(D, lng){
const M=0|(D%1)*60e7;
return {
dir : D<0?lng?'W':'S':lng?'E':'N',
deg : 0|(D<0?D=-D:D),
min : 0|M/1e7,
sec : (0|M/1e6%1*6e4)/100
};
}
Выше приведен объект {deg:, min:, sec:, dir:}
с секундой усеченной до двух цифр (например, 3.14
) и значением dir, равным N
, E
, S
, W
, в зависимости от того,Вы устанавливаете для параметра lng
(долгота) значение true.Например:
ConvertDDToDMS(-18.213, true) == {
deg : 18,
min : 12,
sec : 46.79,
dir : 'W'
}
Или, если вам нужна базовая строка:
function ConvertDDToDMS(D){
return [0|D, 'd ', 0|(D<0?D=-D:D)%1*60, "' ", 0|D*60%1*60, '"'].join('');
}
ConvertDDToDMS(-18.213) == `-18d 12' 46"`
[править июнь 2019] - исправление 8-летней ошибки, которая иногда приводила к тому, что результатОтключение на 1 минуту из-за математики с плавающей запятой при преобразовании точной минуты, например, ConvertDDToDMS(4 + 20/60)
.Обновленный код по-прежнему имеет небольшую проблему, но в этом случае округляется до 19 мин.