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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top