转换具有句点而不是逗号的浮点数?

时间:2008-12-11 13:18:14

标签: c# .net .net-2.0

我从数据库(字符串)中包含文本和价格的表中获取数据。我从数据中提取价格,但我的问题是,有时我可以将其转换为浮动而有时不会。

我注意到了:

Convert.ToSingle(m.Groups[1].Value);

它的工作原理但并不总是因为某个时期是问题(它需要一个逗号)。我能做什么?我试图用“,”代替“。”,但有时在其他PC上它是一个需要它的时期!

4 个答案:

答案 0 :(得分:21)

您遇到此问题,因为转换会检查您的PC语言。您将需要执行以下操作:

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat);

这种方式,它不会检查PC的语言。您可以从MSDN中找到有关InvariantCulture的更多信息。我在项目中有类似的东西,我的转换工作。

答案 1 :(得分:5)

或明确要求这种特定的数字格式:

System.Globalization.NumberFormatInfo nf
  = new System.Globalization.NumberFormatInfo ( )
{
  NumberGroupSeparator = "."
};
float f = float.Parse ( "5.34534", nf );

答案 2 :(得分:2)

如果您没有对数据库的写入权限,首先要做的是尝试说服数据来源使用不变文化。如果用户输入数据,您可以执行以下操作:

float f = float.Parse(input);
string toDb = f.ToString(CultureInfo.InvariantCulture);

然后从另一边:

float f = float.Parse(fromDb, CultureInfo.InvariantCulture);
string toOutput = f.ToString();

虽然你可以说服他们,正如Lette所说,可能更好地说服他们使用原生数据类型。

从上面的片段中我可以看出,由于各种原因,推荐使用float.Parse而不是转换,但最重要的是使用TryParse的能力:

float f;
if (!float.TryParse(input, out f))
{
    // ERROR
}

答案 3 :(得分:0)

正如其他人所说:

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture);

您还必须确保在写入时使用InvariantCulture数据库。 (如果您将数据保存到具有其本机数据类型的列,那会更好,但我离题了......)