解析CSharp中的float值的最佳方法是什麼? 我知道TryParse,但我特別想知道的是點,逗號等。解析float的最佳方法是什麼?
我遇到了問題,我的網站。在我的開發服務器上,','是小數,'。'爲分離器。然而,在產品服務器上,這是相反的。 我該如何最好地捕捉這個?
解析CSharp中的float值的最佳方法是什麼? 我知道TryParse,但我特別想知道的是點,逗號等。解析float的最佳方法是什麼?
我遇到了問題,我的網站。在我的開發服務器上,','是小數,'。'爲分離器。然而,在產品服務器上,這是相反的。 我該如何最好地捕捉這個?
取決於輸入來自哪裏。
如果您的輸入來自用戶,則應使用用戶/頁面正在使用的CultureInfo(Thread.CurrentThread.CurrentUICulture)。
您可以通過查看HttpRequest.UserLanguages屬性獲取並顯示用戶的文化。 (不正確的100%,但我發現它是一個非常好的初步猜測)有了這些信息,您可以在頁面的開頭設置Thread.CurrentThread.CurrentUICulture。
如果您的輸入來自內部源,則可以使用InvariantCulture來解析字符串。
如果您的輸入來自受控源,則Parse方法的使用稍微容易一些。也就是說,你已經驗證了字符串。如果解析失敗,解析將拋出(緩慢)異常。
如果輸入是不受控制的(來自用戶或其他互聯網源),TryParse對我來說更好看。
使用Try/Parse解析時使用中性文化(或您知道的)。
如果你想持續存在的價值觀(數字,日期,時間等)爲了內部的目的。每次使用「InvariantCulture」來格式化&解析值。 「InvariantCulture的」是每臺計算機上一樣,每個OS與任何用戶的文化/語言/等...
string strFloat = (15.789f).ToString(System.Globalization.CultureInfo.InvariantInfo);
float numFloat = float.Parse(System.Globalization.CultureInfo.InvariantInfo, strFloat);
string strNow = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantInfo);
DateTime now = DateTime.Parse(System.Globalization.CultureInfo.InvariantInfo, strNow);
是真實的,但並不真正與問題相關。 – 2008-11-15 12:32:41
傳遞一個CultureInfo或NumberFormatInfo表示要解析浮動的文化;這控制着什麼字符被用於小數,組分隔符等。
例如,以確保'。'字符被視爲您可以在CultureInfo.InvariantCulture中傳遞的十進制指示符(在服務器應用程序中,您傾向於希望事物相同,而不考慮環境的文化)。
我同意勒皮的回覆;把它放在代碼中:
string s = "123,456.789";
float f = float.Parse(s, CultureInfo.InvariantCulture);
你總是可以使用Parse的過載,其中包括文化的使用?
例如:
Double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting
如果您有您所有數據的控制,你應該在所有的代碼中使用「CultureInfo.InvariantCulture」。
儘量避免使用float.Parse,而是使用TryParse,因爲它執行得更好,但執行相同的工作。 這也適用於double,DateTime等...
(部分型號還提供TryParseExact還執行得更好!)
即使所有數據都有效,TryParse確實能夠更快速地工作嗎?我希望他們在「成功」的情況下具有相同的性能,但由於拋出異常的成本,TryParse比Parse更快。 – 2008-09-29 15:48:23
然後又一次,如果TryParse返回false,你會拋出異常嗎?在這種情況下,float.Parse比TryParse更有效率! – Sklivvz 2008-09-30 08:32:33
來源是從一個網站的輸入。我不能依靠它是有效的。所以我像前面提到的那樣使用TryParse。 但我不知道如何給currentCulture它。
此外,這會給我它目前運行的服務器的文化,但因爲它是萬維網,用戶可以從任何地方......
既然你不知道網絡用戶文化,你可以做一些猜測。 TryParse帶有一種文化,用於分隔符和。對於十進制數,AND TryParse與使用的文化。分隔符和小數。如果他們都成功,但得到不同的答案,那麼你將不得不問他們打算用戶。否則,你可以正常進行,只要你有兩個相同的結果或一個有用的結果或沒有可用的結果。
你就可以知道一個簡單的語句服務器的當前Cuklture:
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentCulture;
注有ID的CurrentUICulture屬性,但的UICulture從ResourceMeanager形式MULTILANGUAGES應用。對於數字格式,您必須考慮CurrentCulture。
我希望這會幫助你
願意,因爲它似乎每個人都這樣做。 我個人儘量避開<3個字符的搜索詞。當所有搜索必須> 3個字符時,認爲這是一直困擾着我的東西。 #號也使我的蜘蛛感到興奮。 – 2008-09-30 09:00:19