Как преобразовать положительную или отрицательную научную нотацию в число в C#?

Я пробовал эти два кода:

1)

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", out h2);

2)

Decimal.Parse(Convert.ToString(used[row, column].Value), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 

Но это не работает для значения -8.13E-06.

Есть ли другой лучший вариант для преобразования научной нотации в десятичную?

Заранее спасибо.


person Community    schedule 25.04.2016    source источник
comment
можешь объяснить, что ты имеешь в виду под словом "не работает"? вы получаете ошибку или неожиданное значение?   -  person user1666620    schedule 25.04.2016
comment
В первом коде я получаю 0;   -  person    schedule 25.04.2016
comment
и во втором коде я получаю ошибку как неверную строку ввода   -  person    schedule 25.04.2016
comment
При использовании метода TryParse вам действительно следует зафиксировать результат bool или использовать его в операторе if, чтобы вы могли обработать случай, когда он терпит неудачу.   -  person juharr    schedule 25.04.2016


Ответы (2)


Если в вашей культуре используется "." как разделитель:

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float);

Или вы можете указать InvariantCulture:

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture);

или как в вашем примере:

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", NumberStyles.Float, CultureInfo.InvariantCulture, out h2);
person Roman Doskoch    schedule 25.04.2016
comment
decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture); Сработало хорошо Большое спасибо. - person ; 25.04.2016

AllowExponent не будет работать следующим образом: https://msdn.microsoft.com/en-us/library/system.globalization.numberstyles(v=vs.110).aspx

Указывает, что числовая строка может быть представлена ​​в экспоненциальном представлении. Флаг AllowExponent позволяет проанализированной строке содержать показатель степени, начинающийся с символа «E» или «e», за которым следует необязательный положительный или отрицательный знак и целое число. Другими словами, он успешно анализирует строки в форме nnnExx, nnnE+xx и nnnE-xx. Он не допускает десятичного разделителя или знака в мантиссе или мантиссе; чтобы разрешить анализ этих элементов в строке, используйте флаги AllowDecimalPoint и AllowLeadingSign или используйте составной стиль, включающий эти отдельные флаги.

System.Globalization.NumberStyles.Float — такой составной стиль.

person tolanj    schedule 25.04.2016