сложная строка для двойного преобразования - PullRequest
0 голосов
/ 24 октября 2011

У меня есть строки в 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 #?Спасибо.

PS: я уже могу читать их из файла XML и в данный момент извлекаю их как строку.

Ответы [ 4 ]

1 голос
/ 24 октября 2011

Привет, вот еще одна версия того, что написал Марко.

            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.Надеюсь, кто-то придумает лучшую версию, чем эта.

1 голос
/ 24 октября 2011

Попробуйте с этим:

// 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;
}
0 голосов
/ 24 октября 2011

Если ваши значения всегда имеют 2 символа в конце, вы можете просто удалить их и проанализировать число.

var newstring = fullstring.Substring(0, fullstring.Length - 2);
var number = double.Parse(newstring);
0 голосов
/ 24 октября 2011

Удалите строку суффикса mV и nA, используя метод string.Substring или string.Remove(), и используйте метод double.TryParse(), чтобы разобрать строку для удвоения.

...