0

我正在尝试检查字符串变量的值是否为双倍。

我已经看到了这个现有的问题(检查变量是否为双精度数据类型),它的答案很好,但我有一个不同的问题。

public static bool IsDouble(string ValueToTest) 
    {
            double Test;
            bool OutPut;
            OutPut = double.TryParse(ValueToTest, out Test);
            return OutPut;
    }

从我上面的代码中,当 ValueToTest 为“-∞”时,我在变量 Test 中得到的输出为“-Infinity”,并且该方法返回 true。

当 ValueToTest 为“NaN”时,我得到的输出为“NaN”。

它们是 C# 中的“-∞”和“NaN”双值吗?

还有一种方法可以只检查实数(https://en.wikipedia.org/wiki/Real_number)并排除无穷大和 NaN 吗?

4

3 回答 3

3

是的,它们是以下的有效值double:请参阅文档

只需更新您的方法以包括对NaNand的检查Infinity

public static bool IsDoubleRealNumber(string valueToTest)
{
    if (double.TryParse(valueToTest, out double d) && !Double.IsNaN(d) && !Double.IsInfinity(d))
    {
        return true;
    }

    return false;
}
于 2018-01-12T14:45:35.570 回答
2

"NaN"并且"-∞"是可解析为的有效字符串double。因此,如果您不希望它们被视为有效值,则需要将它们过滤掉double

public static bool IsValidDouble(string ValueToTest)
{
    return double.TryParse(ValueToTest, out double d) && 
           !(double.IsNaN(d) || double.IsInfinity(d));
}
于 2018-01-12T14:46:30.433 回答
0

检查这个 Double 有无穷大和 inNan 检查,希望这会得到。

 if (Double.IsInfinity(SampleVar))
{
  //Put your  logic here.
}
if (Double.IsNaN(SampleVar))
{
  //Put your  logic here.
}
于 2018-01-12T14:47:12.617 回答