2012-03-05 1 views
0

У меня есть странная проблема в преобразовании строки в double в .NET 3.5. Вот мой код:double.parse (str) результат не действует на порядковом сервере

dbl = double.Parse(str); 

Когда ул струнный с простой двойной, как «5,67» результат для DBL является 567,0.

+0

, что это значение 'str' – FosterZ

+0

@FosterZ: сообщение гласит: «Когда str является простым двойным, как 5.67», поэтому я предполагаю, что str «5.67» ... – Chris

ответ

2

Я бы предположил, что это проблемы с локализацией, и вам необходимо использовать overload that specifies a format provider.

Вопрос, скорее всего, ожидается, что , в качестве разделителя десятичной дроби и . в качестве разделителя тысяч (и, таким образом, игнорирует его).

Пример воспроизвести возможный вопрос:

string input = "5.67"; 
Console.WriteLine(Double.Parse(input, new CultureInfo("en-gb"))); 
Console.WriteLine(Double.Parse(input, new CultureInfo("de-de"))); 

Воспроизводит:

5.67 
567 
+0

благодарит Криса. ты прав. Я изменил локализацию своего портативного устройства на английский, и он работает. нет необходимости перегружать поставщика формата. –

+0

@mehrdad nekoupour: в зависимости от того, что вы пишете, вам может потребоваться явное принуждение данной интерпретации чисел в случае, если кто-то другой, управляющий программным обеспечением, имеет свой язык, установленный по-разному. Также вы можете быть в курсе CultureInfo.InvariantCulture, который может быть полезен для этого типа вещей. – Chris

0

Я просто отредактировав ответ Криса:

value = "5.67"; 
double out; 
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol; 
culture = CultureInfo.CreateSpecificCulture("en-GB"); 
Console.WriteLine(Double.TryParse(value, style, culture, out number)?number:0); 
Смежные вопросы