Jaki jest najprostszy sposób zmniejszenia wartości Java BigDecimal
zawierającej dowolną wartość do postaci kanonicznej, aby dwa numery BigDecimal
reprezentujące tę samą liczbę były porównywane równomiernie za pomocą metody equals()
?Kanoniczna reprezentacja BigDecimal
ja przetwarzania moich numerów z dowolnych ciągów za pomocą kodu:
BigDecimal x = new BigDecimal(string1, MathContext.DECIMAL64);
BigDecimal y = new BigDecimal(string2, MathContext.DECIMAL64);
Od (string1
, string2
) są dowolne, mogą być, na przykład, ("1"
, "1.0000"
) lub ("-32.5"
, "1981"
) ...
Co szukam to najprostsza (najkrótsza/najczystszy kod) realizacja metodzie canonicalize dla których powyższe twierdzenie
assert x.compareTo(y) != 0 ||
(canonicalize(x).equals(canonicalize(y)) &&
x.compareTo(canonicalize(x)) == 0 && y.compareTo(canonicalize(y)) == 0);
uda ...:
public static BigDecimal canonicalize(BigDecimal b) {
// TODO:
}
Po co ci to potrzebne, zamiast po prostu używać 'compareTo'? –
Nie możesz użyć 'x.setScale (y.scale())'? – Keppil
@Keppil, teraz patrzę na dokumenty i wygląda na to, że masz rację: [" Zwraca" BigDecimal ", którego skala jest podaną wartością i której wartość jest liczbowo równa temu' BigDecimal's. "] (http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#setScale-int-) – 0xbe5077ed