通过c#将小数点坐标转换为度,分和秒

有没有人知道简单的短代码转换它而不使用额外的库?

像这样:

double coord = 59.345235; int sec = (int)Math.Round(coord * 3600); int deg = sec / 3600; sec = Math.Abs(sec % 3600); int min = sec / 60; sec %= 60; 

编辑:添加了一个Abs调用,以便它也适用于负角度。

你可以使用时间跨度:(棘手,但它的工作原理)

  double coord = 123.312312; var ts = TimeSpan.FromHours(Math.Abs(coord)) int degrees = Math.Sign(coord) * Math.Floor(ts.TotalHours); int minutes = ts.Minutes; int seconds = ts.Seconds; 

我在你的问题中推断你想要从笛卡儿坐标到极坐标。

如果是这种情况,您需要的基本公式是:

r =√(x2 + y2)

θ= atan(y / x)

其中r是距离,θ是从x = 0(关于原点)的角度

这有帮助吗?

我想出了以下内容。 它正确处理负坐标(南纬或西经)并返回未被分为几分钟或几秒的余数(以度为单位)。

 public static double ConvertDecimalToDegMinSec(double value, out int deg, out int min, out int sec) { deg = (int)value; value = Math.Abs(value - deg); min = (int)(value * 60); value = value - (double)min / 60; sec = (int)(value * 3600); value = value - (double)sec / 3600; return value; }