Frage

ich tat etwas Einheit bei der Arbeit zu testen und einen eigenartigen Fehler für eine der Behauptungen aufgetaucht. Beachten Sie, dass expectedValue und actual sind beide Doppelzimmer.

Assert.AreEqual(expectedValue, actualValue);

Die Ausnahme festgestellt, dass sie nicht gleich waren, dass die Ausarbeitung "Erwartungswert: <6.8> Istwert. <6.8>"

Der erwartete Wert ist ein hart codiert 6,8 und der Ist-Wert formuliert Datenbankwerte mit unseren Klassifikationsverfahren durchlaufen (wie Equal Records oder Jenks Natur Breaks).

Meine Vermutung ist, dass der Unterschied wahrscheinlich ist, dass die Mantissen der 2-Werte sind ähnlich, bis das niedrigstwertige Bit. Ich die Tests aktualisiert, um ein Epsilon zu zählen zu finden, wenn die beiden Werte nahe genug sind, aber ich bin gespannt, ob es eine Möglichkeit, die Mantisse zu zwingen, mit dem Anzeigewert übereinstimmen, wenn ich die doppelten angezeigt. Ist eine solche Mantissenkorrektursteuerschaltung exist?

War es hilfreich?

Lösung

ich bin nicht ganz sicher, was Sie mit der Mantisse zwingt den Anzeigewert übereinstimmen ... es sind keine doppelten Werte, die sind genau 0,1, zum Beispiel.

Wenn Sie einige Code anzeigen möchten die genau Wert eines Doppel aber ich habe eine DoubleConverter.cs -Datei, die es einfach macht:

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

Eine weitere Alternative ist das Round-Trip-Formatbezeichner ( „r“) zu verwenden, wenn ein doppelte bespannen Umwandlung - das garantiert, dass das Ergebnis genügend Informationen hat später den gleichen genauen Wert zu reproduzieren. Mit anderen Worten, wenn x != y, dann x.ToString("r") != y.ToString("r").

Andere Tipps

Sie können sowohl in eine Zeichenfolge konvertieren: actualValue.ToString("0.000") und diese Zeichenfolgen zu vergleichen.

Das könnte gemacht wird Ihre Anforderungen genau entsprechen.

Wenn Sie testen möchten, ob die Standardanzeigewerte übereinstimmen, zu vergleichen, nur die Standardanzeigewerte:

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top