float.Parse()不按我想要的方式工作
问题描述:
我有一个文本文件,我使用它将信息输入到我的应用程序中。问题是有些值是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