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

时间:2014-06-04 18:12:31

标签: c# geometry angle

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

2 个答案:

答案 0 :(得分:1)

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

我们假设您要使用元组(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值构造一个元组,如下所示:

var dms = new Tuple<double, double, double>(3, 5, 2);
var degrees = GetDegreesFromDMS(dms);
祝你好运。

答案 1 :(得分:-1)

对于数学部分,我将使用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();
相关问题