将字符串度数转换为十进制单位[关闭]

Posted

技术标签:

【中文标题】将字符串度数转换为十进制单位[关闭]【英文标题】:convert string degrees into decimal units [closed] 【发布时间】:2014-06-04 18:12:30 【问题描述】:

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

【问题讨论】:

你对这个要求有什么问题? 到底谁在投票?这里有什么用处?什么是显示研究? @AlexeiLevenkov 该帖子符合每一个反对投票的指标,没有个赞成投票的指标。 不清楚您是否在解析时遇到问题,了解转换的工作原理或其他问题。您已经告诉我们您的目标,但没有告诉我们您的问题。 @AlexeiLevenkov 该帖子代表了我们不希望在此站点上出现的各种内容。它还没有完成它的研究,信息已经很容易获得,使它没有用,不清楚(有许多可能的角度十进制表示)。回答它会鼓励网站继续滥用和贡献更多质量非常低的内容不属于这里。鼓励这种非常低质量的内容会降低网站的标准,赶走专家,鼓励非专家回答,并抑制网站对世界的有用性。 【参考方案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 一个可行的解决方案(因为所有愤怒的 cmets 都让我紧张)...... 我在这里使用元组的原因是对称性。我从相反的函数返回一个元组。相反函数的其他选项是自定义类型或输出参数。不过,对于这种情况,您是对的,只使用三个参数会更简单。【参考方案2】:

对于数学部分,我将使用https://***.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://***.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);
    

在解析函数中,我将根据众所周知的分隔符拆分字符串,并根据拆分字符串分配类成员。请注意,这个函数对于错误的输入并不是很安全:

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

【讨论】:

我相信是'',而不是" 如果3°2" 有效(即度数和秒数,没有分钟数)这会起作用吗?不知道这是否是预期的输入,只是好奇(我认为不会,但我不确定)。 新更改将不起作用,因为它不再是 char。实际上你以前的代码可以工作,你可以只使用 2 个分隔符,因为你会得到 352&lt;empty&gt; 设置。 克里斯,它会坏掉(正如我提到的,这个函数对于错误的输入还不安全)。我不确定我是否应该把它作为 OP 的练习...... @UlugbekUmirov,好点子。我想他将不得不坚持几秒钟......你是对的,我实际上不需要担心它!我真的需要更仔细地阅读那些输入字符串。我为这个错误道歉

以上是关于将字符串度数转换为十进制单位[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将坐标从非常规格式的度数转换为十进制度数

将地理坐标从度数转换为十进制

将任何文件转换为二进制字符串并从二进制转换为文件[关闭]

将 Cocoa Touch 纬度/经度转换为没有度数符号的字符串

将 char* 字符串转换为十六进制 uint16 [关闭]

使用 0x (C#) 将十六进制字符串转换为 int32 [关闭]