Я бы коснуться как этот
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());
Возвраты
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
Поэтому в зависимости от того, как "хорошо" вам хотите быть для пользователя, вы всегда можете заменить последний шаг, если он не является числом, попробуйте преобразовать его так же, otherwsie это действительно не число.
Это будет взгляд как этот
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
Что бы вы хотели, чтобы кто-то написал 100.000.00? Вы хотите, чтобы с ним обращались как 10000.00 или 100.0000? Или это не номер? –
эх, винт более одного символа без цифр! – Halst
Более гибкое решение может заключаться в том, чтобы позволить пользователю выбирать свою культуру. Таким образом, все числа и даты могут быть отформатированы автоматически до того, к чему они привыкли. И ToString(), и Format() будут работать, не пытаясь «взломать» его. Или ИТ-специалисты исправят компьютеры, чтобы культура была правильно настроена ... – Greg