Я бы сделал что-то вроде этого
float ConvertToFloat(string value)
{
float result;
var converted = float.TryParse(value, out result);
if (converted) return result;
converted = float.TryParse(value.Replace(".", ",")),
out result);
if (converted) return result;
return float.NaN;
}
В этом случае верные данные вернутся
Console.WriteLine(ConvertToFloat("10.10").ToString());
Console.WriteLine(ConvertToFloat("11,0").ToString());
Console.WriteLine(ConvertToFloat("12").ToString());
Console.WriteLine(ConvertToFloat("1 . 10").ToString());
Returns
10,1
11
12
NaN
В этом случае, если его невозможно преобразовать, вы по крайней мере узнаете, что это не число. Это безопасный способ конвертации.
Вы также можете использовать следующую перегрузку
float.TryParse(value,
NumberStyles.Currency,
CultureInfo.CurrentCulture,
out result)
по этому тест-коду:
Console.WriteLine(ConvertToFloat("10,10").ToString());
Console.WriteLine(ConvertToFloat("11,0").ToString());
Console.WriteLine(ConvertToFloat("12").ToString());
Console.WriteLine(ConvertToFloat("1 . 10").ToString());
Console.WriteLine(ConvertToFloat("100.000,1").ToString());
Возвращает следующее
10,1
11
12
110
100000,1
Таким образом, в зависимости от того, насколько «хорошим» вы хотите быть для пользователя, вы всегда можете заменить последний шаг, если это не число, попробуйте преобразовать его таким же образом, в противном случае это действительно не число.
Это будет выглядеть так
float ConvertToFloat(string value)
{
float result;
var converted = float.TryParse(value,
out result);
if (converted) return result;
converted = float.TryParse(value.Replace(".", ","),
out result);
if (converted) return result;
converted = float.TryParse(value,
NumberStyles.Currency,
CultureInfo.CurrentCulture,
out result);
return converted ? result : float.NaN;
}
Где следующее
Console.WriteLine(ConvertToFloat("10,10").ToString());
Console.WriteLine(ConvertToFloat("11,0").ToString());
Console.WriteLine(ConvertToFloat("12").ToString());
Console.WriteLine(ConvertToFloat("1 . 10").ToString());
Console.WriteLine(ConvertToFloat("100.000,1").ToString());
Console.WriteLine(ConvertToFloat("asdf").ToString());
Возвращает
10,1
11
12
110
100000,1
NaN