Frage
Ich habe den folgenden Code...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Welche Ausgaben:
NaN USD
Was gibt?
Ich verwende Double.NaN, um anzuzeigen, dass der Wert nicht existiert und nicht ausgegeben werden sollte.
Lösung
Vielleicht suchen Sie für die IsNaN
statische Funktion?
Versuchen Sie etwas wie folgt aus:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
Andere Tipps
Der Gleitkommastandard IEEE 754 gibt an, dass der Vergleich von NaN mit NaN funktioniert stets falsch zurückgeben.Wenn Sie dies tun müssen, verwenden Sie Double.isNaN().
Dies ist jedoch nicht der beste Weg, das zu erreichen, was Sie tun möchten.Doppelte Werte sind NICHT präzise und werden hier zur Darstellung von Preisen verwendet.Ich wette, dass Sie irgendwann auch die Preise vergleichen wollen, um Gleichheit zu gewährleisten.Das wird nicht funktionieren, denn Sie können sich nicht auf die Gleitkommagleichheit verlassen.
Sie sollten wirklich in Erwägung ziehen, für diese Werte einen ganzzahligen Typ zu verwenden (der den Gleichheitsvergleich unterstützt), anstatt zu versuchen, Doubles zu verwenden.Doubles stehen für wissenschaftliche Probleme;nicht für die Finanzierung.
Als Hintergrundinformation: Was ist die IsNaN()
Methode tut, ist return v != v;
Double.NaN
ist etwas nicht gleich, nicht einmal selbst.
Sehen Sie die Double.NaN Feld in der .NET Framework-Klassenbibliothek Dokumentation:
Verwenden Sie IsNaN festzustellen, ob ein Wert ist keine Zahl. Es ist nicht möglich, bestimmen, ob ein Wert keine ist Anzahl indem sie sie zu einem anderen zu vergleichen Wert gleich NaN.