2008-12-11 87 views
10

我有一个数据库(字符串)中包含文本和价格的表中的数据。我从数据中提取价格,但我的问题是,有时候我可以将它转换为浮点数并且有时不能。转换具有句点而不是逗号的浮点数?

我注意到:

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

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

回答

21

你有这个问题,因为转换检查你的电脑的语言。您需要执行如下操作:

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

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

+0

你打我17秒!因为CultureInfo已经实现了IFormatProvider,所以你实际上不需要NumberFormat属性。 – leppie 2008-12-11 13:22:08

+0

:P我已经增加了我的打字工作,因为我参加了SO;) – 2008-12-11 20:31:39

0

正如其他人所说:

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

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

2

如果您没有对数据库的写入权限,则首先要做的就是尝试说服数据来源使用不变文化。如果数据是由用户输入,你可以这样做:

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 
} 
5

或问对于这种明确的数字格式:

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