Как проверить, является ли значение строковой переменной двойным

Я пытаюсь проверить, является ли значение строковой переменной двойным.

Я видел этот существующий вопрос (Проверка того, является ли переменная данными введите double) и это ответы, и они великолепны, но у меня другой вопрос.

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».

Являются ли они как двойными значениями "-∞", так и "NaN" в С#?

Также есть способ проверить только реальные числа (https://en.wikipedia.org/wiki/Real_number) и исключить бесконечность и NaN?


person Chimebuka Okwuokenye    schedule 12.01.2018    source источник


Ответы (3)


Да, это допустимые значения для double: см. документацию. .

Просто обновите свой метод, чтобы включить проверки NaN и Infinity:

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

    return false;
}
person Patrick Hofman    schedule 12.01.2018

"NaN" и "-∞" являются допустимыми строками, которые можно разобрать до double. Поэтому вам нужно отфильтровать их, если вы не хотите, чтобы они рассматривались как действительные значения double:

public static bool IsValidDouble(string ValueToTest)
{
    return double.TryParse(ValueToTest, out double d) && 
           !(double.IsNaN(d) || double.IsInfinity(d));
}
person René Vogt    schedule 12.01.2018

Проверьте, что у этого Double есть бесконечность и проверки inNan, надеюсь, это получится.

 if (Double.IsInfinity(SampleVar))
{
  //Put your  logic here.
}
if (Double.IsNaN(SampleVar))
{
  //Put your  logic here.
}
person Muhammad Imran khan    schedule 12.01.2018