2015-06-17 2 views
2

Есть способ проверить двойное число в текущей культуре? Я попытался это:Подтвердить двойной номер в текущей культуре

var number ="10,10"; 
double value = double.Parse(number, 
        NumberStyles.Float, 
        CultureInfo.CurrentCulture); 

Если я пытаюсь это с «ES-ES» (где десятичный разделитель «»), то парсинг работает отлично, я получил двойную 10.10, но если я пытаюсь с «ан -US "(где десятичный разделитель -". ") Синтаксический анализ не может понять десятичную точку, поэтому просто опустите его, поэтому я получаю неправильный номер 1010.

Есть ли способ получить исключение, когда я попытался преобразовать неправильный номер для указанной культуры?

Edit: с помощью «» Я не имею в виду тысячи сепаратором, я имею в виду десятичный разделитель для некоторых культур, таких как ES-ES

+0

Нет, поскольку вы должны знать значение '' 10,10 "'. Таким образом, вы должны полагаться на «CurrentCulture» или знать, что изначально использовалось. –

+0

Я знаю, что такое CurrentCulture в использовании, но прибегнув к правильному форматированию, я вставляю неправильный, я не должен был бросать одну культуру в другую, я просто хочу, чтобы ошибка всплывала, а не неудачно конверсия – Balder

+0

Как насчет double.TryParse? – gyosifov

ответ

3

На моей машине следующее бросает FormatException, как и ожидалось:

var number ="10,10"; 
double value = double.Parse(number, 
NumberStyles.Float, 
CultureInfo.InvariantCulture); 

Я подозреваю, что вы используете NumberStyles.AllowThousands. Например, следующий вернется 1010:

var number ="10,10"; 
double value = double.Parse(number, 
NumberStyles.Float | NumberStyles.AllowThousands, 
CultureInfo.InvariantCulture); 

UPDATE

в ответ на комментарий:

... но если я использую EN-US «10,10 "becames" 1010 "вместо того, чтобы высылать сообщение об ошибке

Это не то, что я ожидал; например, следующее будет выбрасывать FormatException:

var number ="10,10"; 
double value = double.Parse(number, 
NumberStyles.Float, 
new CultureInfo("en-US")); 
+0

Да, это правда, потому что«, »не является допустимым разделителем в InvariantCulture, однако я использую несколько культур для рендеринга моего приложения, если я использую es- ES "10,10" превращается в 10.10, но если я использую en-US "10,10" becames "1010" вместо того, чтобы бросать ошибку (это то, что я хочу) – Balder

+0

@Balder - это не то, что я видеть, видеть обновление. – Joe

+1

Я перепроверяю и получил исключение, спасибо! – Balder