Я думаю использовать BigDecimal для сравнения двух значений валюты, округленных до двух цифр. Например, я ожидаю, что следующее значение получится 0, потому что я сравниваю то, что должно округлить до 0,02 с чем-то, равным 0,02. Но это дает -1 !! Есть ли правильный способ сделать это?BigDecimal в Java
Это также должно работать для больших чисел, таких как 123.45 против 123.4534 ... которое должно давать 0, когда используется «compareTo».
Я пробовал использовать математический контекст, но он не кажется элегантным ... есть правильный путь?
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)));
и раствор:
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));
Это еще один способ получить точный номер с плавающей запятой. 1+. –
Придется использовать обе идеи здесь, чтобы понять это правильно. Будет опубликован правильный код. – fodon