Pergunta
Eu tenho o seguinte código ...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Que resultados:
NaN USD
O que dá?
Eu estou usando Double.NaN para indicar que o valor não existir, e não deve ser a saída.
Solução
Talvez você está procurando a função IsNaN
estática?
Tente algo parecido com isto:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Outras dicas
O IEEE 754 ponto flutuante estados padrão que comparar NaN com NaN sempre return false. Se você deve fazer isso, use Double.isNaN ().
Mas, esta não é a melhor maneira de fazer o que você está tentando fazer. Duplas não são precisos, e você estiver usando-os para representar preços aqui. Eu estou apostando que em algum momento, você vai querer comparar os preços de igualdade, também. Isso não vai funcionar, porque você pode' t confiar em ponto flutuante igualdade .
Você realmente deve olhar em usar algum tipo integer para estes valores (que suporta comparação de igualdade) em vez de tentar usar duplos. Duplas são para problemas científicos; não para financiamento.
Como a informação de fundo: o que o método IsNaN()
faz é return v != v;
Double.NaN
não é igual a nada, nem mesmo a própria.
Veja a Double.NaN campo na documentação Biblioteca de classes .NET Framework:
Use IsNaN para determinar se um valor não é um número. Não é possível determinar se um valor não é um número, comparando-o a outro valor igual a NaN.