2013-09-10 2 views
1

У меня есть следующая строка: 2.200000000000E+09Преобразование Экспоненциальный в целое

Если я делаю следующее:

float.Parse("2.200000000000E+09") = 2.2E+9 

Если я:

Int64.Parse("2.200000000000E+09") 

я ожидал:

2200000000 

Inst ead Я получаю исключение формата, так что самый простой способ получить экспоненту в целое число?

ответ

3
var i = System.Numerics.BigInteger.Parse("2.200000000000E+09", 
         NumberStyles.Float , 
         CultureInfo.InvariantCulture); 
+1

+1 для ['BigInteger'] (http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx). Я думаю, что 'Float' включает экспоненту по умолчанию. – UIlrvnd

+0

Но вы все равно можете разобрать эту строку до 'uint' или' long' без переполнения, но необходим флаг 'NumberStyles'. –

+1

Обратите внимание, что 'Float' уже имеет флаг' AllowExponent' как компонент этого; нет необходимости в том, чтобы на нем был установлен флаг. – Servy

4

Вы должны использовать System.Globalization.NumberStyles.Float как:

Int64.Parse("2.200000000000E+09", System.Globalization.NumberStyles.Float); 
+0

Вы можете использовать 'System.Globalization.NumberStyles.Any' конечно или других из них, которые соответствуют , но этот кажется более безопасным ... – UIlrvnd

+0

Это похоже на то, что просит Оригинальный плакат. Перегрузка ['long.Parse (string)'] (http://msdn.microsoft.com/en-us/library/3b6b4bx3.aspx) неявно использует 'NumberStyles.Integer', который не подходит для данной строки. Читайте о перегрузке ['long.Parse (string, NumberStyles)'] (http://msdn.microsoft.com/en-us/library/zkw23d3e.aspx) для получения дополнительной информации. –

0

Вы можете сделать это с помощью

decimal x = decimal.Parse("2.200000000000E+09", NumberStyles.Float); 
+0

@StefanDenchev :) –

 Смежные вопросы

  • Нет связанных вопросов^_^