Вопрос

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

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

Какие результаты:

NaN USD

Что это дает?

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Смотрите на Двойной.Поле NaN в документации по библиотеке классов .NET Framework:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top