float.Parse()不能按我想要的方式工作

时间:2009-06-18 18:55:22

标签: c#

我有一个文本文件,用于将信息输入到我的应用程序中。问题是某些值是float,有时它们是null,这就是我得到异常的原因。

        var s = "0.0";
        var f = float.Parse(s);

上面的代码在第2行引发异常“输入字符串的格式不正确。”

我相信解决方案是float.Parse的高级重载,包括IFormatProvider作为参数,但我对此一无所知。

如何解析“0.0”?

6 个答案:

答案 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);