从十进制度转换为度数分钟秒十分之一。

C#中是否有一些样本转换代码从十进制度到度,分,秒,十?

我认为应该这样做。

double decimal_degrees; // set decimal_degrees value here double minutes = (decimal_degrees - Math.Floor(decimal_degrees)) * 60.0; double seconds = (minutes - Math.Floor(minutes)) * 60.0; double tenths = (seconds - Math.Floor(seconds)) * 10.0; // get rid of fractional part minutes = Math.Floor(minutes); seconds = Math.Floor(seconds); tenths = Math.Floor(tenths); 

这是我上次发表的课程。

 public class GeoAngle { public bool IsNegative { get; set; } public int Degrees { get; set; } public int Minutes { get; set; } public int Seconds { get; set; } public int Milliseconds { get; set; } public static GeoAngle FromDouble(double angleInDegrees) { //ensure the value will fall within the primary range [-180.0..+180.0] while (angleInDegrees < -180.0) angleInDegrees += 360.0; while (angleInDegrees > 180.0) angleInDegrees -= 360.0; var result = new GeoAngle(); //switch the value to positive result.IsNegative = angleInDegrees < 0; angleInDegrees = Math.Abs(angleInDegrees); //gets the degree result.Degrees = (int)Math.Floor(angleInDegrees); var delta = angleInDegrees - result.Degrees; //gets minutes and seconds var seconds = (int)Math.Floor(3600.0 * delta); result.Seconds = seconds % 60; result.Minutes = (int)Math.Floor(seconds / 60.0); delta = delta * 3600.0 - seconds; //gets fractions result.Milliseconds = (int)(1000.0 * delta); return result; } public override string ToString() { var degrees = this.IsNegative ? -this.Degrees : this.Degrees; return string.Format( "{0}° {1:00}' {2:00}\"", degrees, this.Minutes, this.Seconds); } public string ToString(string format) { switch (format) { case "NS": return string.Format( "{0}° {1:00}' {2:00}\".{3:000} {4}", this.Degrees, this.Minutes, this.Seconds, this.Milliseconds, this.IsNegative ? 'S' : 'N'); case "WE": return string.Format( "{0}° {1:00}' {2:00}\".{3:000} {4}", this.Degrees, this.Minutes, this.Seconds, this.Milliseconds, this.IsNegative ? 'W' : 'E'); default: throw new NotImplementedException(); } } } 

这里的解决方案有双向转换。

 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; 

**从转换度/分钟/秒到十进制坐标

您可以简单地使用这两个function:

 public Tuple DecimalToDegrees(decimal decimalValue) { return Tuple.Create(Convert.ToInt32( decimal.Truncate(decimalValue)),Convert.ToInt32( (decimal.Truncate(Math.Abs(decimalValue)*60))%60),Convert.ToInt32( (Math.Abs(decimalValue)*3600)%60)); } 

和:

 public decimal DecimalToDegrees(int deg , int min , int sec) { //~2.3825224324453 Meters error due to accuracy return deg+(min/60m)+(sec/3600m); }