当我想将字符串转换为十进制时,我这样做:
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('.', ',');
}
但我想知道是否有更好的解决方案来解决这个问题。我希望用户,写","或"。",解析是正确的。
非常感谢。
答案 0 :(得分:2)
真正的,非常非常简单的解决方案是阻止用户通过为,
事件添加事件处理程序来键入KeyPress
altogather并将此代码放在那里:
if (e.KeyChar == ',')
{
e.Handled = true;
}