我从数据库(字符串)中包含文本和价格的表中获取数据。我从数据中提取价格,但我的问题是,有时我可以将其转换为浮动而有时不会。
我注意到了:
Convert.ToSingle(m.Groups[1].Value);
它的工作原理但并不总是因为某个时期是问题(它需要一个逗号)。我能做什么?我试图用“,”代替“。”,但有时在其他PC上它是一个需要它的时期!
答案 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
数据库。 (如果您将数据保存到具有其本机数据类型的列,那会更好,但我离题了......)