Float.Parse() не работает так, как я хотел
У меня есть текстовый файл, который я использую для ввода информации в свое приложение. Проблема в том, что некоторые значения являются float, а иногда они равны нулю, поэтому я получаю исключение.
var s = "0.0";
var f = float.Parse(s);
Приведенный выше код выдает исключение в строке 2 "Строка ввода не была в правильном формате".
Я считаю, что решение было бы передовыми перегрузками float.Parse, которые включают в себя параметр IFormatProvider как параметр, но я пока ничего не знаю об этом.
Как разобрать "0.0"?
Ответы
Ответ 1
Точечный символ "." не используется в качестве разделителя (это зависит от настроек Culture). Поэтому, если вы хотите быть абсолютно уверены, что точка правильно проанализирована, вам нужно написать что-то вроде этого:
CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
ci.NumberFormat.CurrencyDecimalSeparator = ".";
avarage = double.Parse("0.0",NumberStyles.Any,ci);
Ответ 2
Сначала вы можете проверить нулевую или пустую строку.
Вы также можете использовать одну из перегрузок Parse
(или даже использовать TryParse
), чтобы дать более конкретный контроль.
например. для проверки с использованием инвариантной культуры, чтобы избежать вариаций разделительных знаков с невидимыми видимыми данными (например, из сообщений A2A):
float SafeParse(string input) {
if (String.IsNullOrEmpty(input)) { throw new ArgumentNullException("input"); }
float res;
if (Single.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out res)) {
return res;
}
return 0.0f; // Or perhaps throw your own exception type
}
Ответ 3
Следующие работы для меня:
string stringVal = "0.0";
float floatVal = float.Parse(stringVal , CultureInfo.InvariantCulture.NumberFormat);
Обратный регистр (работает для всех coutries):
float floatVal = 0.0f;
string stringVal = floatVal.ToString("F1", new CultureInfo("en-US").NumberFormat);
Ответ 4
Я только что попробовал это, и он не исключил никаких исключений.
Является ли ваш формат чисел десятичной запятой, а не десятичной точкой? Вы пробовали:
var s = "0,0";
var f = float.Parse(s);
Спросив об этом, я просто попробовал это с запятой, ожидающей получить исключение, но не сделал этого. Так что это может быть не ответ.
Ответ 5
Или вы могли бы просто проверить, не является ли входной текст нулевым или пустым.
Кроме того, будьте осторожны, потому что в некоторых странах "." (точка), которая разделяет числа с плавающей точкой, является "," (запятая)