将字符串度数转换为十进制单位

本文关键字:十进制 单位 转换 字符串 | 更新日期: 2023-09-27 18:06:38

给定字符串"3°5'2 ",我需要将其转换为十进制表示。

将字符串度数转换为十进制单位

显然,第一步是将字符串表示法转换为度、分和秒。这是简单的字符串解析,所以我将把它作为练习。

假设你要使用Tuple (http://msdn.microsoft.com/en-us/library/system.tuple.aspx)。

public static double GetDegreesFromDMS(Tuple<double,double,double> dms)
{
    // First, calculate total seconds.
    double seconds = (dms.Item2 * 60) + dms.Item3;
    // This makes the fraction of a degree this number / 3600
    return dms.Item1 + (seconds / 3600);
}
要调用它,您需要用DMS值构造一个Tuple,如下所示:
var dms = new Tuple<double, double, double>(3, 5, 2);
var degrees = GetDegreesFromDMS(dms);

好运。

对于数学部分,我将使用https://stackoverflow.com/a/3249890/1783619中的答案。当然,您可以编写自己的实现。我将创建我自己的"Degree"类,看起来像这样:

public class Degree
{
    int degrees;
    int minutes;
    int seconds;
    public static Degree Parse(string input)
    {
      //Implementation below
    }
    public decimal ToDecimal()
    {
       // From https://stackoverflow.com/a/3249890/1783619
       // Modified to use floating point division since my inputs are ints.
       //Decimal degrees = 
       //   whole number of degrees, 
       //   plus minutes divided by 60, 
       //   plus seconds divided by 3600
       return degrees + (minutes/60f) + (seconds/3600f);
    }
}

在parse函数中,我将根据已知的分隔符拆分字符串,并根据拆分的字符串分配类成员。注意,对于错误的输入,这个函数不是很安全:

public static Degree Parse(string input)
{
   Degree parsedDegree = new Degree();
   string[] seperatedStrings = input.Split(new char[] {'°', ''''});
   parsedDegree.degrees = seperatedStrings[0];
   parsedDegree.minutes = seperatedStrings[1];
   parsedDegree.seconds = seperatedStrings[2];
   return parsedDegree;
}

使用它:

Degree myDegree = Degree.Parse("3°5'2''");
Decimal myDecimal = myDegree.ToDecimal();