Когда я хочу, чтобы преобразовать строку в десятичное, я делаю это:Как наилучшим образом преобразовать строку в десятичную?
decimal decParseado;
if (decimal.TryParse(txtTexto.Text, out decParseado) == true)
{
MessageBox.Show("Es decimal: " + decParseado.ToString());
}
else
{
MessageBox.Show("No es decimal");
}
txtTexto является TextBox на мой взгляд. Когда пользователь пишет «12,5», результат верный, десятичная цифра 12,5, но когда пользователь пишет «12,5», результат равен 125.
Одним из решений, которое я нашел, является получение десятичного разделителя от глобализации таким образом:
string strSeparadorDeCulturaActual = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
А затем замените символ «,» или «.». чтобы пользователь не ошибся и может написать любой из двух символов.
if (strSeparadorDeCulturaActual == ".")
{
txtTexto.Text= txtTexto.Text.Replace(',', '.');
}
else
{
txtTexto.Text= txtTexto.Text.Replace('.', ',');
}
Но я хотел бы знать, есть ли лучшее решение этой проблемы. Я бы хотел, чтобы пользователь написал «,» или «.», Синтаксический разбор будет правильным.
Большое спасибо.
оффтоп: Вы _should_ имя переменные на английском языке, иначе ваш код станет беспорядком для других людей (а иногда и для вас самих). – joppiesaus
Правильный способ - научить ваших пользователей, чтобы оба разделителя * не были * обменными. «1,234» или «1.234» - оба абсолютно правильные цифры. У них просто разные ценности. Вы не можете вводить мусор и ожидать, что программа будет его понимать. Просветите своих пользователей. ** Это не проблема программного обеспечения **. Если decimal.TryParse с указанными вами параметрами локализации не анализирует его, ** это неправильно **. – nvoigt
Что посмотреть, если ваши пользователи попытаются ввести 1,234.56? –