2010-10-22 6 views
4

Я пытаюсь разобрать значения, как $ 15,270.75 с выражениемНевозможно разобрать двойную

double cost = 0; 
double.TryParse("$15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out cost); 

, но не имеет никакого успеха

+1

Вы получаете сообщение об ошибке или не получаете нужный результат? –

ответ

8

Валютный символ Инвариантной культуры не $, его ¤. Это работает:

double cost = double.Parse("¤15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); 

Вам потребуется CultureInfo, который поддерживает именно этот формат.

1

это потому, что вы используете InvariantCulture. вам нужен американец CultureInfo

+0

Американцы не единственные, кто использует '$';) – Ozzah

1

Это не будет работать с CultureInfo.Invariant culture. Используйте соответствующую CultureInfo.

4

следующие работы:

var culture = new CultureInfo("en-US"); 

culture.NumberFormat.CurrencyGroupSeparator = "."; 
culture.NumberFormat.CurrencyDecimalSeparator = ","; 

double.TryParse("$15.270,75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, culture, out cost); 

Культура Я здесь ан-США за символом $. Причина, по которой я вручную устанавливаю групповые и десятичные разделители, заключается в том, что формат, используемый во входной строке, отличается от культуры en-US.

Возможно, вы ожидаете определенной культуры, которая не является США. Попробуйте передать это.

0

Если вы хотите что-то, что работает для любого языка, используйте параметр CultureInfo.CurrentCulture для параметра IFormatProvider.

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