2015-01-01 2 views
1

Когда я хочу, чтобы преобразовать строку в десятичное, я делаю это:Как наилучшим образом преобразовать строку в десятичную?

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('.', ','); 
} 

Но я хотел бы знать, есть ли лучшее решение этой проблемы. Я бы хотел, чтобы пользователь написал «,» или «.», Синтаксический разбор будет правильным.

Большое спасибо.

+1

оффтоп: Вы _should_ имя переменные на английском языке, иначе ваш код станет беспорядком для других людей (а иногда и для вас самих). – joppiesaus

+8

Правильный способ - научить ваших пользователей, чтобы оба разделителя * не были * обменными. «1,234» или «1.234» - оба абсолютно правильные цифры. У них просто разные ценности. Вы не можете вводить мусор и ожидать, что программа будет его понимать. Просветите своих пользователей. ** Это не проблема программного обеспечения **. Если decimal.TryParse с указанными вами параметрами локализации не анализирует его, ** это неправильно **. – nvoigt

+0

Что посмотреть, если ваши пользователи попытаются ввести 1,234.56? –

ответ

2

Действительно, на самом деле, очень простым решением было бы запретить пользователю вводить , altogather путем добавления обработчика событий для KeyPress события и поставить этот код там:

if (e.KeyChar == ',') 
{ 
    e.Handled = true; 
} 
+2

Предположительно, им также нужно будет обрабатывать пасту , –

Смежные вопросы