BigInteger и
BigDecimal –
иммутабельные числа
с заданной точностью. Эти классы – наследники
Number, наряду с
обертками примитивных чисел. В классах также реализованы базовые математические операции. Наибольший интерес представляет класс
BigDecimal – дробное число.
Числа с плавающей точкой (
float,
double) хранят свои значения в памяти
в экспоненциальном виде: знак-порядок-мантисса. Этот факт приводит к неочевидным с точки зрения десятичной системы округлениям при математических операциях.
BigDecimal хранит число в десятичном виде:
немасштабированное значение (intVal),
размерность (scale),
точность (precision) и знак. Значение раскладывается на эти компоненты как
intVal ÷ 10^scale. Точность – количество используемых знаков, без учета нулей в начале, но с учетом нулей в конце. Точность числа
0.0010 – 2.
Экземпляр
BigDecimal можно создавать из числа с плавающей точкой, и из строки. В первом случае преобразование из экспоненциального в десятичный вид может привести к неожиданной точности, так что рекомендуется использовать строку.