2012-05-08 3 views
1

Звучит просто, но когда я пытался добиться я запас о том, как это форматировщик сделать это преобразование этого некоторые примеры строк, которые нужно преобразовать в десятичнуюпреобразовать эту строку в десятичное

00.24 
48.34 
01.24 

Значит ли кто-нибудь знает, как я могу выполнить это? Я попытался как этот

try 
{ 
    decimal x = Convert.ToDecimal("00.24",); 
    //Which formatter do I need to pass?? 
    decimal x = Convert.ToDecimal("00.24", Formatter???); 
} 
Catch(Exception e) 
{ 
    throw new Exception() 
} 

Но это не работает, потому что результат это 24D и мне нужно 0.24D

+4

Вы пробовали 'Decimal.Parse()'? –

+1

Не бросайте новое исключение из блока catch, оно заставляет вас потерять исходную информацию об исключении –

+0

@ p.campbell, Decimal.Parse будет иметь такой же эффект, как Convert.ToDecimal ... –

ответ

5

Я подозреваю, что ваша система культура не является английской и имеют различные правила форматирования чисел. Попробуйте пропускание инвариантной культуры в качестве поставщика формата:

decimal d = Convert.ToDecimal("00.24", CultureInfo.InvariantCulture); 

Вы также можете использовать Decimal.Parse:

decimal d = Decimal.Parse("00.24", CultureInfo.InvariantCulture); 
2

Я думаю Decimal.TryParse должен работать. Больше информации here.

3

Почему бы просто не использовать Decimal.Parse

decimal x = Decimal.Parse("00.24"); 
Console.WriteLine(x); // Prints: 00.24 
1

вы получаете результат, потому что точка . является tretaed как группа (тысяча) сепаратор. анализатор просто отбрасывает его и не проверяет правильность размеров группы. Так '20 .100.200' или „1.2.3.4“ будет также получить разобрано как 20100200 и 1234.

Это происходит на многих европейских культурах, как „эс“

Вы должны использовать любую культуру, которая не рассмотрите . в качестве разделителя групп, но как разделитель десятичных чисел. CultureInfo.InvariantCulture - одна из возможных культур (она имеет в основном ту же конфигурацию en-US).

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