c# - isnan - Igualdad con Double.NaN
isnan c# (4)
Tengo el siguiente código...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Qué salidas:
NaN USD
¿Lo que da?
Estoy usando Double.NaN para indicar que el valor no existe, y que no debería salir.
¿Quizás estás buscando la función estática IsNaN
?
Pruebe algo como esto:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Double.NaN
no es igual a nada, ni siquiera a sí mismo.
Consulte el campo Double.NaN en la documentación de .NET Framework Class Library:
Use IsNaN para determinar si un valor no es un número. No es posible determinar si un valor no es un número comparándolo con otro valor igual a NaN.
Como información general: lo que hace el método IsNaN()
es return v != v;
El estándar de punto flotante IEEE 754 establece que comparar NaN con NaN siempre devolverá falso. Si debe hacer esto, use Double.isNaN ().
Pero esta no es la mejor manera de hacer lo que estás tratando de hacer. Los dobles no son precisos, y los está usando para representar los precios aquí. Apuesto a que, en algún momento, también querrás comparar los precios por la igualdad. Eso no va a funcionar, porque no puede confiar en la igualdad de coma flotante .
Debería considerar el uso de un tipo de entero para estos valores (que admite la comparación de igualdad) en lugar de tratar de usar dobles. Los dobles son por problemas científicos; no para las finanzas