Сравнение BigDecimal рекомендует использовать compareTo

Java

предисловие

Ошибка была обнаружена в тесте два дня назад, и мне сказали, что он только изменил количество продуктов в деталях заказа, почему в подсказке было сказано, что цена за единицу продуктов в заказе не может быть изменена (бэкэнд ограничивает цена за единицу специальных заказов, которая не может быть изменена), но он явно не изменил цену за единицу продукта, что странно. Я посмотрел на входные параметры, и цена за единицу товара, переданная в модифицированном интерфейсе, равна цене = 222, а цена за единицу товара в базе данных — 222.000000. Это поле имеет тип BigDecimal, за исключением разной точности, значения равны, и equals используется для проверки равенства в фоновом режиме. Метод compareTo в основном используется BigDecimal для проверки информации в Интернете.

проверить два сравнения

public class BigDecimalDemo {

    public static void main(String [] args) {
        BigDecimal decimal1 = new BigDecimal("222");
        BigDecimal decimal2 = new BigDecimal("222.000000");
        System.out.println(decimal1.equals(decimal2));
        System.out.println(decimal1.compareTo(decimal2));
    }
}

результат операции

Как и ожидалось, метод equals BigDecimal также считается неравным, когда точность отличается, в то время как метод compareTo может игнорировать разницу в точности и сравнивать только одинаковые значения.

посмотрите на исходный код

метод equals для BigDecimal

Исходный код очень подробный, метод equals сравнивает значение и масштаб (значение и точность), точность разная, и он тоже возвращает false.

метод сравнения с BigDecimal

CompareTo также очень подробен, два числа с одинаковым значением, но с разной точностью (например, 2,0 и 2,00) считаются равными двум числам и возвращают 0. Также для метода a.compareTo(b)

  • а
  • а=б, вернуть 0
  • а>б, вернуть 1

публика

Подпишитесь на официальный аккаунт, чтобы читать больше интересных статей