C# 将字符串度数转换为十进制单位
给定一个字符串“3°5'2”,我需要将其转换为十进制表示形式 对于数学部分,我将使用您的答案,当然您可以编写自己的实现。我会创建自己的“学位”类,如下所示:C# 将字符串度数转换为十进制单位,c#,geometry,angle,C#,Geometry,Angle,给定一个字符串“3°5'2”,我需要将其转换为十进制表示形式 对于数学部分,我将使用您的答案,当然您可以编写自己的实现。我会创建自己的“学位”类,如下所示: public class Degree { int degrees; int minutes; int seconds; public static Degree Parse(string input) { //Implementation below } public
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();
显然,第一步是将字符串符号转换为度、分和秒。这是简单的字符串解析,所以我将把它作为练习 假设你要用一个元组来表示()
公共静态双GetDegreesFromDMS(元组dms)
{
//首先,计算总秒数。
双秒=(dms.Item2*60)+dms.Item3;
//这使得度的分数为这个数字/3600
返回dms.Item1+(秒/3600);
}
要调用此函数,您可以使用DMS值构造一个元组,如下所示:
var dms = new Tuple<double, double, double>(3, 5, 2);
var degrees = GetDegreesFromDMS(dms);
var-dms=新元组(3,5,2);
变量度=从dms(dms)获取度;
祝你好运。你对这个要求有什么问题?世界上有谁投票支持这个要求?这里什么有用?研究表明了什么?@AlexeiLevenkov这篇文章满足了向下投票的每一个指标,而没有一个指标满足向上投票的要求。不清楚你在解析、理解转换过程中是否遇到了问题。你已经告诉了我们你的目标,但没有告诉我们你的问题。@AlexeiLevenkov这篇文章代表了我们在这个网站上不想要的所有东西。它还没有做研究,信息已经很容易获取,这使得它没有用处,也不清楚(有许多可能的角度十进制表示法)。回答这个问题会鼓励网站继续被滥用,并提供更多不属于这里的低质量内容。鼓励这种低质量的内容会降低网站的标准,赶走专家,鼓励非专家的回答,并抑制网站对世界的有用性。我相信这是
'
,而不是“
。如果3°2”
是有效的(即度和秒,没有分钟),这会起作用吗?不知道这是否是一个预期的输入,但只是好奇(我不认为会,但我不确定)。新的更改将不起作用,因为它不再是char
。实际上,您以前的代码可以工作,您可以只使用2个分隔符,因为您将获得3
,5
,2
,
集。Chris,它将中断(正如我提到的,对于错误输入,函数还不安全)。我不确定我是否应该把它作为手术的练习…@UlugbekUmirov,说得好。我猜他将不得不坚持“几秒钟……你是对的,我实际上不需要担心它!我真的需要更仔细地阅读那些输入字符串。我为错误的方法表示歉意。有趣的是,对于元组来说,这似乎是一个奇怪的用例(当然,对我来说,任何元组参数都有点奇怪).+1作为有效的解决方案(因为所有愤怒的评论都让我心烦意乱)…我在这里使用元组的原因是对称性。我从相反的函数返回一个元组。相反函数的其他选项是自定义类型或out参数。不过,对于这种情况,您是对的,仅使用三个参数会更简单。
var dms = new Tuple<double, double, double>(3, 5, 2);
var degrees = GetDegreesFromDMS(dms);