#c# #parsing #.net-core #double #c#-interactive
#c# #синтаксический анализ #.net-ядро #двойной #c # -интерактивный
Вопрос:
Когда я пытаюсь запустить этот код с помощью интерактивного компилятора C #
double.Parse("1.5", System.Globalization.NumberStyles.AllowDecimalPoint);
У меня есть это исключение
System.FormatException: Input string was not in a correct format.
System.Number.ParseDouble(string, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
double.Parse(string, System.Globalization.NumberStyles)
<Initialize>.MoveNext()
Я прочитал это из документации, но я не стал от этого мудрее.
Указывает, что числовая строка может иметь десятичную точку. Если
NumberStyles
значение включаетAllowCurrencySymbol
флаг, а анализируемая строка содержит символ валюты, символ десятичного разделителя определяетсяCurrencyDecimalSeparator
свойством. В противном случае символ десятичного разделителя определяетсяNumberDecimalSeparator
свойством.
Также приведенный ниже код выдает мне ту же ошибку:
double.Parse("1.500", System.Globalization.NumberStyles.AllowDecimalPoint);
Почему у меня эта ошибка? Я ожидал, что он даст мне 1.5 как двойное, потому что разрешена десятичная точка.
Примечание: мой компьютер настроен на использование запятой в качестве десятичного разделителя, что означает, что приведенный ниже код работает.
double.Parse("1,5", System.Globalization.NumberStyles.AllowDecimalPoint);
Комментарии:
1. Разве вы не ответили на свой собственный вопрос в примечании? десятичная точка фактически означает десятичный разделитель, который в вашей текущей культуре является запятой. Вы должны использовать
double.Parse("1.5", System.Globalization.NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
, например.
Ответ №1:
Добавьте третий параметр к вызову
double.Parse("1.5", System.Globalization.NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
Это происходит потому, что ваши настройки локали не принимают точку в качестве десятичного разделителя, поэтому вам нужно добавить этот параметр, чтобы объяснить, что вы анализируете число, где десятичным разделителем является точка.