【问题标题】:complex string to double conversion复杂字符串到双重转换
【发布时间】:2011-10-24 11:36:30
【问题描述】:

我在一个 XML 文件中有字符串,这些字符串是双精度数(或浮点数),例如:

<VIPair>
<voltage>+100mV</voltage>
<current>+1.05pA</current>
</VIPair>

<VIPair>
<voltage>+5.00mV</voltage>
<current>+0.0035nA</current>
</VIPair>

第一对将是“0.1”伏特和“0.00000000000105”安培。 第二对是“0.005”伏特和“0.000000000035”安培。

如何在 C# 中将它们转换为双精度浮点数? 谢谢。

P.S:我已经可以从 xml 文件中读取它们,现在我将它们作为字符串检索。

【问题讨论】:

    标签: c# casting floating-point double


    【解决方案1】:

    试试这个:

    // Read string (if you do not want to use xml)
    string test = "<voltage>+100mV</voltage>";
    string measure = test.Substring(test.IndexOf('>')+1);
    measure = measure.Substring(0, measure.IndexOf('<')-1);
    
    // Extract measure unit
    string um = measure.Substring(measure.Length - 1);
    measure = measure.Substring(0, measure.Length - 1);
    // Get value
    double val = Double.Parse(measure);
    // Convert value according to measure unit
    switch (um)
    {
        case "G": val *= 1E9; break;
        case "M": val *= 1E6; break;
        case "k": val *= 1E3; break;
        case "m": val /= 1E3; break;
        case "u": val /= 1E6; break;
        case "n": val /= 1E9; break;
        case "p": val /= 1E12; break;
    }
    

    【讨论】:

    • 更正:使用 ToLower() 不正确,因为 M=10^6, m=10^-3, P=10^15, p=10^-12
    • @AndreyAtapin:哎呀,你是对的,绝对!编辑我的帖子以反映这一点。非常感谢!!!
    • @leppie: 好吧,我不知道你怎么能把 micro 写成“short”... :)
    • 感谢您的解决方案效果很好。它也只是 'u' 代表 micro 和 'M' 代表 mega。但在工程论文中,您可以将其视为“µ”:P 仅供参考。曹
    • @leppie:谢谢……我的问题是 micro,因为它是一个希腊字母,我不记得我可以使用“u”。谢谢!! :)
    【解决方案2】:

    嗨,这里是 Marco 所写内容的另一个版本。

                string str = "1pV";
                double factor;
                double value;
                switch (str[str.Length-2])
                {
                    case 'M': factor = 1E6; break;
                    case 'm': factor = 1E-3; break;
                    case 'n': factor = 1E-9; break;
                    case 'p': factor = 1E-12; break;
                    default:
                        factor = 1; break;
                }
                value = double.Parse(str.Substring(0,str.Length-2)) * factor;
    

    假设您已经可以使用 html 文本。我试图用一个子字符串做同样的事情,用字符而不是字符串切换大小写(这比比较字符串要快一点)和一个 double.parse。希望有人提出比这更好的版本。

    【讨论】:

    • 谢谢,没错,字符应该运行得更快!
    【解决方案3】:

    使用string.Substringstring.Remove()方法删除后缀字符串mVnA,并使用double.TryParse()方法将字符串解析为double。

    【讨论】:

      【解决方案4】:

      如果您的值最后总是有 2 个字符,您可以简单地删除这些字符并解析数字。

      var newstring = fullstring.Substring(0, fullstring.Length - 2);
      var number = double.Parse(newstring);
      

      【讨论】:

        猜你喜欢
        • 2018-06-04
        • 2013-02-25
        • 2014-06-20
        • 2011-06-12
        • 1970-01-01
        • 2017-10-06
        • 2014-01-06
        • 2019-04-27
        相关资源
        最近更新 更多