Was ist der einfachste Weg, um eine Java BigDecimal
enthält einen beliebigen Wert in eine kanonische Form zu verringern, so dass zwei BigDecimal
‚s die gleiche Zahl, die gleich vergleichen, wird die equals()
Methode?kanonische Darstellung eines BigDecimal
ich meine Zahlen ist Parsen von beliebigen Zeichenkette Code wie folgt verwendet:
BigDecimal x = new BigDecimal(string1, MathContext.DECIMAL64);
BigDecimal y = new BigDecimal(string2, MathContext.DECIMAL64);
Da (string1
, string2
) willkürlich sind, könnten sie sein, zB ("1"
, "1.0000"
) oder ("-32.5"
, "1981"
) ...
Was ich suche ist die einfachste (kürzeste/sauberste Code) Implementierung des Verfahrens canonicalize, für die die obige Behauptung
assert x.compareTo(y) != 0 ||
(canonicalize(x).equals(canonicalize(y)) &&
x.compareTo(canonicalize(x)) == 0 && y.compareTo(canonicalize(y)) == 0);
erfolgreich sein wird ...:
public static BigDecimal canonicalize(BigDecimal b) {
// TODO:
}
Warum würden Sie dies benötigen, anstatt einfach 'compareTo' verwenden? –
Kannst du 'x.setScale (y.scale())' nicht verwenden? – Keppil
@Keppil, ich suche die Dokumentation an jetzt und es sieht so aus, du hast Recht: [“ Gibt ein' BigDecimal' dessen Skala der angegebene Wert ist, und deren Wert numerisch gleich dieser 'BigDecimal' ist. „] (http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#setScale-int-) – 0xbe5077ed