Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串度数转换为十进制单位_C#_Geometry_Angle - Fatal编程技术网

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

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

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

对于数学部分,我将使用您的答案,当然您可以编写自己的实现。我会创建自己的“学位”类,如下所示:

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);