Ответ 1
Возможно, вы ищете статическую функцию IsNaN
?
Попробуйте что-то вроде этого:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
У меня есть следующий код...
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));
}
Стандарт IEAE 754 с плавающей запятой гласит, что сравнение NaN с NaN всегда возвращает false. Если вы должны сделать это, используйте Double.IsNaN()
.
Но это не лучший способ сделать то, что вы пытаетесь сделать. Двойные значения НЕ точны, и вы используете их для представления цен здесь. Могу поспорить, что в какой-то момент вы тоже захотите сравнить цены на равенство. Это не сработает, потому что нельзя полагаться на равенство с плавающей запятой.
Вы действительно должны использовать некий целочисленный тип для этих значений (который поддерживает сравнение на равенство), вместо того, чтобы пытаться использовать double. Двойники для научных задач; не для финансов.
В качестве исходной информации: что делает IsNaN()
метод return v != v;
Double.NaN
не равен ничему, даже самому себе.
См. Double.NaN Field в документации библиотеки классов .NET Framework:
Используйте IsNaN, чтобы определить, действительно ли значение не является числом. Невозможно определить, не является ли значение число, сравнивая его с другим значение, равное NaN.