Иллюстрированный самоучитель по Java

Класс 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() – возвращает мантиссу числа.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.