Почему BigDecimal считает 1.0 и 1.00 разными числами — и к чему это приводит в Java
BigDecimal's equals() compares not only the numeric value but also the number of digits after the decimal point, so 1.0 and 1.00 are not equal. This can make an application believe that a price in the database has changed even when it has stayed the same, causing it to resend an event. The discussion also covers how this behavior affects collections, monetary calculations, and comparisons of data from different sources.
Цена в базе осталась прежней, но приложение считает, что она изменилась, и повторно отправляет событие. Причина может скрываться в масштабе BigDecimal : equals() сравнивает не только числовое значение, но и количество знаков после запятой, поэтому 1.0 и 1.00 для него не равны. Разберём, как эта особенность влияет на коллекции, денежные расчёты и сравнение данных из разных источников, а также как нормализовать суммы и избежать подобных ошибок. Разобрать BigDecimal