2008-12-11 85 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); 
相關問題