将字符串度数转换为十进制单位
本文关键字:十进制 单位 转换 字符串 | 更新日期: 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();