Класс 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() – возвращает мантиссу числа.