2016-02-24 5 views
2

В соответствии с Reference Source:Анализировать с несколькими десятичными разделителями

// . - Decimal point. The first '.' character 
// in the format string determines the location of the decimal separator in the 
// formatted value; any additional '.' characters are ignored. The actual 
// character used as a the decimal separator in the output string is given by 
// the NumberFormatInfo used to format the number. 

первый десятичный разделитель должен быть использован, последующие десятичные разделители должны быть проигнорированы. Однако следующее утверждение

float.Parse("1.000.000", new CultureInfo("en")) 

бросает FormatException с сообщением «Входная строка не была в правильном формате».

Это ошибка или предполагаемое поведение?

+0

Вы читаете комментарии, в которых вы должны прочитать [документацию] (https://msdn.microsoft.com/en-us/library/2thct5cb.aspx): _ "строку формы: ' [ ws] [sign] [integ-digits [,]] integ-digits [. [дробные цифры]] [e [sign] exponential-digits] [ws] '" _, в котором упоминается ровно один символ десятичной запятой. – CodeCaster

+0

Для меня это похоже на намеренное поведение. «1.000.000» просто не является допустимым числом на английском языке. Похоже, что это фактически строка в локали, которая использует '.' в качестве разделителя тысяч. –

+1

Я столкнулся с ситуацией, когда символ _same_ использовался как _decimal separator_ и как _thousand separator_. Windows (и класс 'CultureInfo') позволяют это сделать. –

ответ

3

Посмотрите на пункт над ним:

// # - Digit заполнителем. Если значение является

Текст цитирует относится к строке формата, используемой для преобразования в строкового, как

value.ToString("#.###.###"); 

Это не имеет никакого отношения к .Parse() методам.

2

Это комментарий в разделе

// Format strings that do not start with an alphabetic character, or that start 
// with an alphabetic character followed by a non-digit, are called 
// user-defined format strings. The following table describes the formatting 
// characters that are supported in user defined format strings. 

, поэтому раздел, который говорит о float.ToString(...).