复杂的字符串到双重转换

时间:2011-10-24 11:36:30

标签: c# casting floating-point double

我在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#中将它们转换为float的两倍? 感谢。

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

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

嗨,这是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。希望有人能提出比这更好的版本。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果你的值总是有两个字符,你可以简单地删除它们并解析数字。

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