我有一个数据库(字符串)中包含文本和价格的表中的数据。我从数据中提取价格,但我的问题是,有时候我可以将它转换为浮点数并且有时不能。转换具有句点而不是逗号的浮点数?
我注意到:
Convert.ToSingle(m.Groups[1].Value);
它的工作原理,但并不总是因为某个时期的问题(它需要一个逗号)。我能做什么?我试图用“,”替换“。”,但是在其他PC上的某个时候,这是需要的一段时间!
我有一个数据库(字符串)中包含文本和价格的表中的数据。我从数据中提取价格,但我的问题是,有时候我可以将它转换为浮点数并且有时不能。转换具有句点而不是逗号的浮点数?
我注意到:
Convert.ToSingle(m.Groups[1].Value);
它的工作原理,但并不总是因为某个时期的问题(它需要一个逗号)。我能做什么?我试图用“,”替换“。”,但是在其他PC上的某个时候,这是需要的一段时间!
你有这个问题,因为转换检查你的电脑的语言。您需要执行如下操作:
Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat);
这样,它不会检查PC的语言。您可以从MSDN中找到有关InvariantCulture的更多信息。我在项目中有类似的东西,我的转换工作。
正如其他人所说:
Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture);
您还必须确保您使用InvariantCulture
时写数据库。 (如果将数据保存到具有其本机数据类型的列中,则会更好)但是我离题了......)
如果您没有对数据库的写入权限,则首先要做的就是尝试说服数据来源使用不变文化。如果数据是由用户输入,你可以这样做:
float f = float.Parse(input);
string toDb = f.ToString(CultureInfo.InvariantCulture);
再从另一面:
float f = float.Parse(fromDb, CultureInfo.InvariantCulture);
string toOutput = f.ToString();
但如果你能说服的,它可能是更好的他们,因为莱特说服他们说服他们使用本地数据类型。
我也会,这可以从上面的代码片段中可以看出,使用电子书籍在float.Parse用于转换的原因有多种,但最显著是使用能力的TryParse:
float f;
if (!float.TryParse(input, out f))
{
// ERROR
}
或问对于这种明确的数字格式:
System.Globalization.NumberFormatInfo nf
= new System.Globalization.NumberFormatInfo ()
{
NumberGroupSeparator = "."
};
float f = float.Parse ("5.34534", nf);
你打我17秒!因为CultureInfo已经实现了IFormatProvider,所以你实际上不需要NumberFormat属性。 – leppie 2008-12-11 13:22:08
:P我已经增加了我的打字工作,因为我参加了SO;) – 2008-12-11 20:31:39