我有接受数字的文本框。这些数字将保存在数据库中。当我输入像 2,35 这样的数字并转换为浮点数并发送到数据库时出现错误,因为数据库只接受带点的数字,例如 2.35
float num = float.Parse(textBox1.Text);
num 仍然是 2,25
如何管理?我试过了,CultureInfo.InvariantCulture
但我从来没有得到我想要的
我有接受数字的文本框。这些数字将保存在数据库中。当我输入像 2,35 这样的数字并转换为浮点数并发送到数据库时出现错误,因为数据库只接受带点的数字,例如 2.35
float num = float.Parse(textBox1.Text);
num 仍然是 2,25
如何管理?我试过了,CultureInfo.InvariantCulture
但我从来没有得到我想要的
您可以尝试以下方法:
float.Parse(textBox1.Text.Trim(), CultureInfo.InvariantCulture.NumberFormat);
我希望这可以解决问题。
用这个:
CultureInfo.CreateSpecificCulture("en-US");
我当时有同样的问题,它通过上面的代码解决了
这是一个普遍的全球化问题。您必须定义的是存储数据本身的单一文化,因为您将其存储为字符串值。然后,使用该文化进行所有数据输入和处理。在我们的代码中,为了处理多文化数学和数据显示,我们有几个看起来类似的块:
//save current culture and set to english
CultureInfo current = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
//Do Math and Data things
//restore original culture
System.Threading.Thread.CurrentThread.CurrentCulture = current;
通过这种方式,您可以确保以相同的方式处理和存储所有数据,而不管用于生成或显示数据的文化。
编辑
要进行数据保存,并将数字转换为字符串,您会以完全相同的方式进行操作。当您将当前线程 CultureInfo 设置为“en-US”时,.ToString()
所有数字中的方法都将使用“。” 而不是“,”代表小数点。另一种方法是在调用 .ToString() 时指定格式提供程序。
decimalNumber.ToString(new CultureInfo("en-US"));
这指定当您将数字转换为字符串时,使用提供的区域性中的 NumberFormat。
num
是2,25
因为它在你的文化中向你展示。如果您使用通常的机制(即带参数的预准备语句),它将正确地传递给数据库。如果你坚持手动将 SQL 粘合在一起,那么一定要使用InvariantCulture
格式化数字,但一般情况下,请不要。
最简单的方法是将 ',' 替换为 '.' 就像:
float num = float.Parse(textBox1.Text);
string stringValue = num.ToString().Replace(',', '.');
然后将“stringValue”发送到数据库。
我希望这对你有帮助。