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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top