将文本框中的数字转换为浮点C#

将文本框中的数字转换为浮点C#,c#,string-conversion,C#,String Conversion,我有一个接受数字的文本框。这些数字将保存在数据库中。 当我输入像2,35这样的数字并转换成浮点并发送到数据库时,我得到了错误,因为数据库只接受带点的数字,例如2.35 float num = float.Parse(textBox1.Text); num仍然是2,25 如何管理?我试过使用CultureInfo.InvariantCulture但是我从来没有得到我想要的最简单的方法是用“.”代替“.”,比如: float num = float.Parse(textBox1.Text); st

我有一个接受数字的文本框。这些数字将保存在数据库中。 当我输入像2,35这样的数字并转换成浮点并发送到数据库时,我得到了错误,因为数据库只接受带点的数字,例如2.35

float num = float.Parse(textBox1.Text);
num仍然是2,25


如何管理?我试过使用
CultureInfo.InvariantCulture
但是我从来没有得到我想要的最简单的方法是用“.”代替“.”,比如:

float num = float.Parse(textBox1.Text);
string stringValue = num.ToString().Replace(',', '.');
然后将“stringValue”发送到数据库

我希望这对您有所帮助。

请使用:

CultureInfo.CreateSpecificCulture("en-US");

我当时也有同样的问题,上面的代码解决了这个问题,因为它是在你们的文化中展示给你们的。如果您使用通常的机制(即带有参数的准备语句),它将被正确地传递到数据库。如果您坚持手动将SQL粘合在一起,那么一定要使用
InvariantCulture
来设置数字格式,但通常情况下,请不要这样做。

这是一个常见的全球化问题。您必须定义一个单独的区域性,在其中存储数据本身,因为您将数据存储为字符串值。然后,使用该区域性进行所有数据输入和处理。在我们的代码中,为了处理多文化数学和数据显示,我们有几个类似于此的块:

//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()时指定格式提供程序


这指定将数字转换为字符串时,使用提供的区域性中的NumberFormat。

您可以尝试以下操作:

float.Parse(textBox1.Text.Trim(), CultureInfo.InvariantCulture.NumberFormat);

我希望这能解决这个问题。

为什么你用逗号而不是点?你从哪里得到的错误?如果在数据库中存储数据时出现问题,我们需要查看您的SQL代码。您可以使用简单的
字符串。替换
以点替换逗号。@XTG不同的区域性使用不同的十进制符号。欧洲大部分地区使用逗号而不是点。@Nolonar,这会将“1.000.000,00”(一百万)等数字替换为“1.000.000.00”。他必须从操作系统获取当前区域性(使用Thread.CurrentThread.CurrentCulture)。阅读更多这最后一个解决方案很好,但如果我想将文本框值存储到float属性中就不行了。。。所有人都必须有一个通用的解决方案…这很好,总是以同样的方式节省。十进制输入;CultureInfo current=System.Threading.Thread.CurrentThread.CurrentCulture;System.Threading.Thread.CurrentThread.CurrentCulture=新文化信息(“en-US”);input=decimal.Parse(textBox1.Text.Replace(',',');System.Threading.Thread.CurrentThread.CurrentCulture=当前;例如,如果用户输入4,5或4.5,则输出将为4,5。这没关系。但若我想把这个值存储到db表中,我必须转换成字符串并用点替换逗号。我想避免这种情况。还有别的办法吗?
float.Parse(textBox1.Text.Trim(), CultureInfo.InvariantCulture.NumberFormat);