Domanda
Ho il seguente codice ...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Quali uscite:
NaN USD
Ciò che dà?
sto usando Double.NaN per indicare che il valore non esiste, e non dovrebbe essere in uscita.
Soluzione
Forse si sta cercando per la funzione statica IsNaN
?
Provare qualcosa di simile a questo:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Altri suggerimenti
Il IEEE 754 a virgola mobile standard di afferma che il confronto NaN con NaN sarà sempre restituire false. Se si deve fare questo, utilizzare Double.isNaN ().
Ma, questo non è il modo migliore per fare quello che stai cercando di fare. Doppio non sono precise, e si sta utilizzando loro per rappresentare i prezzi qui. Scommetto che a un certo punto, si sta andando a voler confrontare i prezzi per l'uguaglianza, anche. Che non sta andando a lavorare, perché si puo' t contare su floating point uguaglianza .
Si dovrebbe considerare di usare un certo tipo integer per questi valori (che supporta confronto di uguaglianza) piuttosto che cercare di usare doppie. Raddoppia sono per problemi scientifici; non per la finanza.
Come informazioni di base: ciò che il metodo IsNaN()
fa è return v != v;
Double.NaN
non è uguale a nulla, nemmeno se stesso.
Vedere la Double.NaN campo nella documentazione di .NET Framework Class Library:
isNaN per determinare se un valore non è un numero. Non è possibile determinare se un valore non è un numero confrontandolo con un altro valore pari a NaN.