如何在c#Windows窗体中将带有十进制的TextBox字符串转换为十进制。

时间:2018-11-20 08:14:59

标签: c# textbox decimal windows-forms-designer

我的数据库中的列具有十进制(18,0)数据类型。 当我尝试插入时,出现“格式错误”。我喜欢这样...:

decimal amountToWithdraw = Convert.ToDecimal(txtAmountToTransfer.Text);

如果我写25.89,那么这会给我错误消息“格式错误” 它适用于孔号,例如25,但不适用于点25.89

我在文本框中使用此eventHandler:

private void txtAmountToTransfer_KeyPress(object sender, KeyPressEventArgs e)
        {
            char ch = e.KeyChar;
            if(ch == 46 && txtAmountToTransfer.Text.IndexOf('.') != -1)
            {
                e.Handled = true;
                return;
            }

            if(!Char.IsDigit(ch) && ch != 8 && ch != 46)
            {
                e.Handled = true;
            }
        }

这应该很容易,但是我尝试了很多方法,但直到我无法正常工作。预先谢谢你

2 个答案:

答案 0 :(得分:0)

尝试使用

* def json = ['a', 'b', 'c']
* def fun = 
"""
function(array) {
  var temp = '';
  for (var i = 0; i < array.length; i++) {
    if (i > 0) temp = temp + ',';
    temp = temp + "'" + array[i] + "'"
  }
  return '(' + temp + ')';
}
"""
* def result = fun(json)
* match result == "('a','b','c')"

答案 1 :(得分:0)

尝试以下方法:

private void txtAmountToTransfer_KeyPress(object sender, KeyPressEventArgs e)
{
  char ch = e.KeyChar;
  char decimalSeparatorChar = Convert.ToChar(Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator);
  if(ch == decimalSeparatorChar && txtAmountToTransfer.Text.IndexOf(decimalSeparatorChar) != -1)
  {
     e.Handled = true;
     return;
  }

  if(!Char.IsDigit(ch) && ch != 8 && ch != decimalSeparatorChar)
  {
     e.Handled = true;
  }
}

然后decimal.Parse(txtAmountToTransfer.Text)可以正常工作。并确保在键入数字时使用正确的小数点分隔符。