Класс Big Decimal
Класс Big Decimal
Класс BigDecimal расположен В пакете java.math .
Каждый объект этого класса хранит два целочисленных значения: мантиссу вещественного числа в виде объекта класса Biglnteger , и неотрицательный десятичный порядок числа типа int .
Например, для числа 76.34862 будет храниться мантисса 7 634 862 в объекте класса Biglnteger , и порядок 5 как целое число типа int . Таким образом, мантисса может содержать любое количество цифр, а порядок ограничен значением константы integer.MAX_VALUE . Результат операции над объектами класса BigDecimal округляется по одному из восьми правил, определяемых следующими статическими целыми константами:
- ROUND_CEILING — округление в сторону большего целого;
- ROUND_DOWN — округление к нулю, к меньшему по модулю целому значению;
- ROUND_FLOOR — округление к меньшему целому;
- ROUND_HALF_DOWN — округление к ближайшему целому, среднее значение округляется к меньшему целому;
- ROUND_HALF_EVEN — округление к ближайшему целому, среднее значение округляется к четному числу;
- ROOND_HALF_UP — округление к ближайшему целому, среднее значение округляется к большему целому;
- ROUND_UNNECESSARY — предполагается, что результат будет целым, и округление не понадобится;
- ROUND_UP — округление от нуля, к большему по модулю целому значению.
В классе BigDecimal четыре конструктора:
- BigDecimal (Biglnteger bi) — объект будет хранить большое целое bi, порядок равен нулю;
- BigDecimal (Biglnteger mantissa, int scale) — задается мантиса mantissa и неотрицательный порядок scale объекта; если порядок scale отрицателен, возникает исключительная ситуация;
- BigDecimal (double d) — объект будет содержать вещественное число удвоенной точности d ; если значение d бесконечно или NaN , то возникает исключительная ситуация;
- BigDecimal (String val) — число задается строкой символов val , которая должна содержать запись числа по правилам языка Java.
При использовании третьего из перечисленных конструкторов возникает неприятная особенность, отмеченная в документации. Поскольку вещественное число при переводе в двоичную форму представляется, как правило, бесконечной двоичной дробью, то при создании объекта, например, BigDecimal(0.1) , мантисса, хранящаяся в объекте, окажется очень большой. Она показана на Рисунок 4.5. Но при создании такого же объекта четвертым конструктором, BigDecimal ("0.1") , мантисса будет равна просто 1.
В Классе переопределены методы doubleValue(), floatValue(), intValue(), longValue() .
Большинство методов этого класса моделируют операции с вещественными числами. Они возвращают объект класса BigDecimal . Здесь буква х обозначает объект класса BigDecimal , буква n — целое значение типа int , буква r — способ округления, одну из восьми перечисленных выше констант:
abs() — абсолютное значение объекта this ;
add(x) — операция this + х ;
divide(х, r) — операция this / х с округлением по способу r ;
divide(х, n, r) — операция this / х с изменением порядка и округлением по способу r ;
mах(х) — наибольшее из this и х ;
min(x) — наименьшее из this и х ;
movePointLeft(n) — сдвиг влево на n разрядов;
movePointRight(n) — сдвиг вправо на n разрядов;
multiply(х) — операция this * х ;
negate() — возврзщает объект с обратным знаком;
scale() — возвращает порядок числз;
setscaie(n) — устзнавливает новый порядок n ;
setscaie(n, r) — устанавливает новый порядок п и округляет число при необходимости по способу r ;
signumo — знак числа, хранящегося в объекте;
subtract(х) — операция this - х ;
toBiginteger() — округление числа, хранящегося в объекте;
unscaiedvalue() —возвращает мантиссу числа.