【问题标题】:How to Convert TextBox string with decimal to decimal in c# Windows form.如何在 c# Windows 窗体中将带十进制的文本框字符串转换为十进制。
【发布时间】:2018-11-20 08:14:59
【问题描述】:

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

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

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

我在 Textbox 上使用这个 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;
            }
        }

这应该很容易,但我尝试了很多方法,但我还是没有让它起作用。提前谢谢你

【问题讨论】:

  • decimal.Parse 或 TryParse
  • 好吧,如果是用户输入,那么decimal.TryParse 将是一个好主意(如果您没有屏蔽文本框或其他东西)。由于您当前的文化设置,它没有转换,我相信逗号 , 而不是点 . 会起作用。
  • 如何检测当前的文化分隔符:char a = Convert.ToChar(Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);

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


【解决方案1】:

尝试以下方法:

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) 会正常工作。并确保在输入数字时使用正确的小数分隔符。

【讨论】:

  • 谢谢它正在工作,但如果我把 25,50 放入数据库中,则不会插入 25,50 而是 26。它是四舍五入的。有什么方法可以得到 25,50 ...或者如果我输入 30,80 那么我在我的数据库中得到相同的值。我正在尝试创建银行系统。如果每个人都用 25,50 存款,而我的代码四舍五入到 26,那么这家银行将损失很多钱..(这只是一个例子)所以我想知道是否有任何方法可以获得与我输入文本框相同的值.正如我在问题中提到的,它是 decimal(18, 0) 数据类型。再次感谢您。
  • @HelenTekie 由于您的 db 列类型,它是四舍五入的,将其更改为十进制 (18,2)。请参阅以下帖子stackoverflow.com/questions/25190976/…
【解决方案2】:

尝试使用

decimal amountToWithdraw = Convert.ToDecimal(txtAmountToTransfer.Text, CultureInfo.InvariantCulture);

【讨论】:

  • 这很好,直到 , 在您的文化中成为小数分隔符。
  • 如问题中所述,他正在尝试解析25.89之类的值,因此在这种情况下逗号不是分隔符。
  • @RameshVerma 在 OP 的问题中,您看不到他当前的文化设置,而且他在转换时遇到了错误。因此,在这种情况下,逗号可能是分隔符。
  • @RameshVerma 这只是意味着他使用了不正确的分隔符。 UI 应该与 UI 文化一起使用,并且在这种情况下解析将起作用。
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 2022-07-22
  • 2020-01-09
  • 2011-08-25
  • 2014-04-28
  • 2018-01-03
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多