给定一个字符串“3°5'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();