Javascript中的十进制度到几分钟和几秒

Chr*_*her 9 javascript function angle

我试着写一个取小数度(纬度或长度)并将它们转换为DMS度分钟秒的函数.我知道我的意思是将小数点数乘以60然后再次为小数.但我是一个菜鸟.我会分开号码吗?

function ConvertDDToDMS(DD) {
    eg. DD =-42.4
    D= 42;
    M= 4*60;
    S= .M * 60;
    var DMS =

    return DMS //append Direction (N, S, E, W);
}
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?

Mar*_*ahn 29

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
    };
}
Run Code Online (Sandbox Code Playgroud)

上述给你一个对象{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'
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想要基本字符串:

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"`
Run Code Online (Sandbox Code Playgroud)


Gab*_*abe 10

目前尚不清楚你如何需要输出.这是一个以字符串形式返回所有3个值的版本:

function ConvertDDToDMS(dd)
{
    var deg = dd | 0; // truncate dd to get degrees
    var frac = Math.abs(dd - deg); // get fractional part
    var min = (frac * 60) | 0; // multiply fraction by 60 and truncate
    var sec = frac * 3600 - min * 60;
    return deg + "d " + min + "' " + sec + "\"";
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为`parseInt(dd)`会比`dd |更清晰一点 0`. (3认同)

Ale*_*dam 7

更新:我删除了没有任何意义的部分(感谢cwolves!).

这里有另一个实现.它不会像以前那样短暂或高效,但希望更容易理解.

要做到正确,首先您需要了解计算是如何完成的,然后才尝试实现它们.为此,伪代码是一个很好的选择,因为您用简单的英语或简单的语法写下易于理解的步骤,然后将其翻译成所选的编程语言.

我希望它有用!

/* This is the pseudocode you need to follow:
 * It's a modified version from 
 * http://en.wikipedia.org/wiki/Geographic_coordinate_conversion#Conversion_from_Decimal_Degree_to_DMS

function deg_to_dms ( degfloat )
   Compute degrees, minutes and seconds:
   deg ? integerpart ( degfloat )
   minfloat ? 60 * ( degfloat - deg )
   min ? integerpart ( minfloat )
   secfloat ? 60 * ( minfloat - min )
   Round seconds to desired accuracy:
   secfloat ? round( secfloat, digits )
   After rounding, the seconds might become 60. These two
   if-tests are not necessary if no rounding is done.
   if secfloat = 60
      min ? min + 1
      secfloat ? 0
   end if
   if min = 60
      deg ? deg + 1
      min ? 0
   end if
   Return output:
   return ( deg, min, secfloat )
end function
*/

function deg_to_dms (deg) {
   var d = Math.floor (deg);
   var minfloat = (deg-d)*60;
   var m = Math.floor(minfloat);
   var secfloat = (minfloat-m)*60;
   var s = Math.round(secfloat);
   // After rounding, the seconds might become 60. These two
   // if-tests are not necessary if no rounding is done.
   if (s==60) {
     m++;
     s=0;
   }
   if (m==60) {
     d++;
     m=0;
   }
   return ("" + d + ":" + m + ":" + s);
}
Run Code Online (Sandbox Code Playgroud)

  • Javascript实现不适用于负值deg (2认同)