Подтвердить что ты не робот

Равенство с Double.NaN

У меня есть следующий код...

if (Price_Foreign != Double.NaN)
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

Какие выходы:

NaN USD

Что дает?

Я использую Double.NaN, чтобы указать, что это значение не существует и не должно выводиться.

4b9b3361

Ответ 1

Возможно, вы ищете статическую функцию IsNaN?

Попробуйте что-то вроде этого:

if (!Double.IsNaN(Price_Foreign))
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

Ответ 2

Стандарт IEAE 754 с плавающей запятой гласит, что сравнение NaN с NaN всегда возвращает false. Если вы должны сделать это, используйте Double.IsNaN().

Но это не лучший способ сделать то, что вы пытаетесь сделать. Двойные значения НЕ точны, и вы используете их для представления цен здесь. Могу поспорить, что в какой-то момент вы тоже захотите сравнить цены на равенство. Это не сработает, потому что нельзя полагаться на равенство с плавающей запятой.

Вы действительно должны использовать некий целочисленный тип для этих значений (который поддерживает сравнение на равенство), вместо того, чтобы пытаться использовать double. Двойники для научных задач; не для финансов.

Ответ 3

В качестве исходной информации: что делает IsNaN() метод return v != v;

Ответ 4

Double.NaN не равен ничему, даже самому себе.

См. Double.NaN Field в документации библиотеки классов .NET Framework:

Используйте IsNaN, чтобы определить, действительно ли значение не является числом. Невозможно определить, не является ли значение число, сравнивая его с другим значение, равное NaN.