Вопрос
У меня есть следующий код...
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.