BigDecimal та BigInteger

Класjava.math.BigDecimalкраще для роботи з фінансами замістьdouble, так як більш гнучкий у налаштуваннях. Мені не доводилося використовувати клас на практиці. Але під час створення бухгалтерського софту нього варто звернути увагу.

СтворитиBigDecimalу складі типуdoubleпросто:

Можна створити з рядка:

Щоб задати кількість цифр після коми, використовуйте методsetScale(). Хорошою практикою є одночасне вказівку разом із масштабом режиму округлення за допомогоюsetScale(scale, roundingMode). Режим округлення визначає правило округлення числа.

Є вісім варіантів режиму заокруглення, які задаються константами:

ROUND_CEILING: У більшу сторону

ROUND_DOWN: Відкидання розряду

ROUND_FLOOR: У менший бік

ROUND_HALF_UP: Округлення вгору, якщо число після коми >= .5

ROUND_HALF_DOWN: Округлення вгору, якщо число після коми > .5

ROUND_HALF_EVEN: Округлення половини за парністю округляє як завжди. Однак, коли округлена цифра 5, округлення йтиме вниз, якщо цифра зліва від 5 парна і вгору, якщо непарна. Це найкраще ілюструється прикладом:

ROUND_UNNECESSARY: ВикористовуйтеROUND_UNNECESSARYколи потрібно використовувати один з методів, який вимагає введення режиму округлення, але відомо, що результат округляти не потрібно.

Під час поділу будьте обережні та вказуйте спосіб округлення у методіdivide(). В іншому випадку можна отримати ArithmeticException.

ЧислаBigDecimalє незмінними (якString). Це означає, що якщо створюється новий об'єктBigDecimalзі значенням "2.00", такий об'єкт залишиться "2.00" ініколи не може бути змінено.

Тому методиadd(),multiply(),subtract(),divide(),mod()повертають новий об'єктBigDecimal, що містить результат.

Не використовуйте для порівняння методequals(), тому що метод порівнюватиме масштаби. Якщо масштаби різняться. Натомість слід використовувати методиcompareTo()іsignum().

Аналогічно працюйте з класомBigInteger.

BigInteger

Знайти найбільше з двох за допомогою методуmax().