我有一個數據庫(字符串)中包含文本和價格的表中的數據。我從數據中提取價格,但我的問題是,有時候我可以將它轉換爲浮點數並且有時不能。轉換具有句點而不是逗號的浮點數?
我注意到:
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