我有一个文本文件,用于将信息输入到我的应用程序中。问题是某些值是float,有时它们是null,这就是我得到异常的原因。
var s = "0.0";
var f = float.Parse(s);
上面的代码在第2行引发异常“输入字符串的格式不正确。”
我相信解决方案是float.Parse的高级重载,包括IFormatProvider作为参数,但我对此一无所知。
如何解析“0.0”?
答案 0 :(得分:25)
点符号“。”不用作分隔符(这取决于文化设置)。因此,如果您想确保正确解析点,则需要编写如下内容:
CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
ci.NumberFormat.CurrencyDecimalSeparator = ".";
avarage = double.Parse("0.0",NumberStyles.Any,ci);
答案 1 :(得分:7)
您可以先检查null或空字符串。
你也可以使用Parse
的一个重载(甚至使用TryParse
)来提供更具体的控制。
E.g。检查使用不变文化,以避免使用非用户可见数据(例如来自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
}
答案 2 :(得分:5)
以下为我效劳:
string stringVal = "0.0";
float floatVal = float.Parse(stringVal , CultureInfo.InvariantCulture.NumberFormat);
相反的情况(适用于所有国家/地区):
答案 3 :(得分:2)
我刚试过这个,并没有任何例外。
您的数字格式是使用小数点而不是小数点吗?你试过了吗?
var s = "0,0";
var f = float.Parse(s);
问过这个问题后,我刚刚尝试使用逗号来获得异常,但事实并非如此。所以这可能不是答案。
答案 4 :(得分:2)
或者,您可以简单地检查输入文本是否为空或空。
另外,要小心,因为在某些国家/地区,“。”用于分隔浮点数的(点)是“,”(逗号)
答案 5 :(得分:2)
这应该有效。
var s = "0.0";
var f = float.Parse(s, CultureInfo.InvariantCulture);