我有一個文本文件,我使用它將信息輸入到我的應用程序中。問題是有些值是float,有時它們是null,這就是爲什麼我得到一個例外。float.Parse()不按我想要的方式工作
var s = "0.0";
var f = float.Parse(s);
上面的代碼在第2行引發異常「輸入字符串的格式不正確」。
我相信解決方案將是float.Parse的高級重載,其中包括IFormatProvider作爲參數,但我還不知道它的一切。
如何解析「0.0」?
我有一個文本文件,我使用它將信息輸入到我的應用程序中。問題是有些值是float,有時它們是null,這就是爲什麼我得到一個例外。float.Parse()不按我想要的方式工作
var s = "0.0";
var f = float.Parse(s);
上面的代碼在第2行引發異常「輸入字符串的格式不正確」。
我相信解決方案將是float.Parse的高級重載,其中包括IFormatProvider作爲參數,但我還不知道它的一切。
如何解析「0.0」?
點符號「。」不用作分隔符(這取決於文化設置)。所以,如果你想絕對確保點被正確解析,你需要寫這樣的事:
CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
ci.NumberFormat.CurrencyDecimalSeparator = ".";
avarage = double.Parse("0.0",NumberStyles.Any,ci);
或者,您可以簡單地檢查輸入文本是否爲空或空。
另外,要小心,因爲在某些國家,「。」 (點)分隔浮點數是「,」(逗號)
您可以檢查null或空字符串第一。
您也可以使用Parse
(或甚至使用TryParse
)的重載之一來給出更具體的控制。
E.g.檢查使用invarient培養,以避免與非用戶可見數據小數點變化(例如從A2A通信):
float SafeParse(string input) {
if (String.IsNullOrEmpty(input)) { throw new ArgumentNullException("input"); }
float res;
if (Single.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out res)) {
return res;
}
return 0.0f; // Or perhaps throw your own exception type
}
我以下工作:
string stringVal = "0.0";
float floatVal = float.Parse(stringVal , CultureInfo.InvariantCulture.NumberFormat);
相反的情況(適用於所有coutries):
float floatVal = 0.0f;
string stringVal = floatVal.ToString("F1", new CultureInfo("en-US").NumberFormat);
我試過你的代碼了,我能夠解析值罰款。 – 2009-06-18 18:58:51
此代碼依賴於文化(即依賴於區域設置)。所以我們有些人不會看到這種行爲。 – inazaruk 2009-06-18 19:05:40