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().