Mam zamiar użyć BigDecimal do porównania dwóch wartości walut zaokrąglonych do 2 cyfr. Na przykład spodziewam się, że poniższe przyniosą 0, ponieważ porównuję coś, co powinno zaokrąglić do 0.02 z czymś, co wynosi 0.02. Ale daje -1 !! Czy jest to właściwy sposób?BigDecimal w Javie
Powinno to również działać w przypadku większych liczb, takich jak 123.45 w stosunku do 123.4534 ... które powinny dać 0, gdy "compareTo" jest używane.
Próbowałem używać kontekstu matematycznego, ale nie wydaje się elegancki ... czy istnieje poprawny sposób?
BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));
i roztwór:
BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));
To kolejny sposób uzyskania dokładnej liczby zmiennoprzecinkowej. 1+. –
Musiał użyć obu pomysłów, aby to naprawić. Czy wysłać prawidłowy kod. – fodon