【问题标题】:Is it possible to parse "-1.#IND", etc using Double.Parse method是否可以使用 Double.Parse 方法解析“-1.#IND”等
【发布时间】:2014-02-21 22:24:50
【问题描述】:

尝试对表示特殊值的字符串(例如“-1.#IND”和“INF”)使用System.Double.Parse(string) 方法会导致FormatException

是否有任何内置的 .NET 框架支持来解析这些?

【问题讨论】:

  • 当您将字符串 -1.#IND 传递给 double.parse 时,您期望什么值?我
  • @AshReva,我很确定double.NegativeInfinity
  • 其实double.NaN。 “-1.#IND”似乎是某些技术创建的标准表示。
  • 某些技术不是必需的标准,.Net Framework 支持。
  • 作为参考,this question 讨论了这些字符串值。看起来它们来自 C/C++ 标准库。

标签: c# .net


【解决方案1】:

不,double.Parse 唯一识别的非数字值是 double.Nan.ToString()double.PositiveInfinity.ToString()double.NegativeInfinity.ToString() 返回的字符串值(取决于文化)。

在你的情况下,我只会使用 switch:

double dblValue;
switch strValue
{
   case "-1.#IND":
      dblValue = double.Nan;
      break;
   case "INF":
      dblValue = double.Infinity;
      break;
   //... other casess
   default:
      dblValue = double.Parse(strValue);
      break;
}

【讨论】:

    【解决方案2】:

    NaN 和其他值以指定的文化(或中性,如果未指定文化)解析。如果你愿意,你可以和here 一起玩。

    如果你必须解析一些更特别的东西,那么就

    public double MyParse(string text)
    {
        if(text == "blablabla")
            return double.NaN;
        if(text.Contains("blablabla")) ...
        if(text.StartsWith(...
        return double.Parse(text);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2016-07-26
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      相关资源
      最近更新 更多