【问题标题】:I can not write the decimal number in the textbox我无法在文本框中写入十进制数
【发布时间】:2018-01-15 12:25:43
【问题描述】:

我有一个使用十台计算机的 c# 程序。程序获取十进制数字作为输入。问题是在某些计算机上输入被写为 10.5,但是,程序将此逗号作为一个点。我不懂为什么。我使用程序中的“替换”命令将逗号转换为点。现在,无论是逗号还是点都不是为了在问题计算机中获得十进制输入而编写的。例如,我分享以下代码

一开始我的代码是这样的:

private void button1_Click(object sender, EventArgs e)
{
    decimal number1 = Convert.ToDecimal(textBox1.Text);
    decimal number2 = Convert.ToDecimal(textBox2.Text);
    decimal result = number1 + number2;
    textBox3.Text = Convert.ToString(result);
}

然后在某些计算机上,我注意到程序将用于写入十进制数字的逗号键识别为点。我不知道为什么。

我使用“替换”命令将数字中的逗号转换为点。

private void button1_Click(object sender, EventArgs e)
{
    string text1 = textBox1.Text.Replace(".", ",");
    string text2 = textBox2.Text.Replace(".", ",");
    decimal number1 = Convert.ToDecimal(text1);
    decimal number2 = Convert.ToDecimal(text2);
    decimal result = number1 + number2;
    textBox3.Text = Convert.ToString(result);
}

它可以在我的电脑上运行。在某些计算机上,当使用点写入数字时,程序不会检测到点。在某些计算机上,程序既不检测点也不检测逗号。

我希望所有的计算机都能写十进制数。我该怎么做?

【问题讨论】:

标签: c# winforms decimal


【解决方案1】:

使用它来独立于 PC 的区域设置:

str = string.Format(CultureInfo.InvariantCulture, "{0}", d); // decimal to string
d = decimal.Parse(str, NumberStyles.Any, CultureInfo.InvariantCulture); // string to decimal

【讨论】:

  • 这需要哪个库?括号中的参数给出错误。
  • @Alihan AYDIN:在 using 中添加 using System.Globalization; 以获取 CultureInfo.InvariantCulture 参数
【解决方案2】:

这是因为不同的文化背景。应用程序在运行时从设备检索一些资源,如当前时间和语言。说到小数,有些国家用句号写,有些国家用逗号写。

当涉及到解析和打印时,您通常可以将文化设置作为参数传递(我相信您可以使用逗号来做到这一点)。如果您传递文化设置,它将覆盖默认设置(由应用运行的设备定义)。

如果您不想在每次使用小数时都传递文化,您应该能够在应用程序范围内设置文化:

CultureInfo ci = new CultureInfo(theCultureString); //e.g. "en-US"
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

注意这是如何为当前线程设置文化的。如果你在非主线程上工作,这显然是行不通的。如果你为主线程设置了这个,然后从它创建一个新线程,新线程应该复制主线程的文化。

【讨论】:

  • 我的 c# 中没有“CultureInfo”。有“CultureInfoConverter”。
  • 你用的是什么框架? CultureInfo 应该在 .NET Framework 的 System.Globalization 包中可用,也许您需要添加引用?
  • @AlihanAYDIN 点击CultureInfo,按住 Shift+Alt 并按 F10。这将打开需要在 C# 文件中添加 using 的菜单。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2015-01-03
相关资源
最近更新 更多