Большинство методов этого класса моделируют операции с вещественными числами. Они возвращают объект класса BigDecimal. Ниже в описании методов буква x обозначает объект класса BigDecimal, буква n — целое значение типа int, буква r — способ округления, одну из восьми перечисленных ранее констант:
□ abs () — абсолютное значение объекта this;
□ add (x) — операция сложения this + x;
□ divide (x, r) — операция деления this / x с округлением по способу r;
□ divide (x, n, r) — операция деления this / x с изменением порядка и округлением по способу r;
□ max(x) — наибольшее из this и x;
□ min(x) — наименьшее из this и x;
□ movePointLeft (n) — сдвиг влево на n разрядов;
□ movePointRight(n) — сдвиг вправо на n разрядов;
□ multiply(x) — операция умножения this * x;
□ negate () — возвращает объект с обратным знаком;
□ scale () — возвращает порядок числа;
□ setScale(n) — устанавливает новый порядок n;
□ setScale (n, r) — устанавливает новый порядок n и округляет число при необходимости по способу r;
□ signum () — знак числа, хранящегося в объекте;
□ subtract (x) — операция вычитания this — x;
□ toBiginteger () — округление числа, хранящегося в объекте;
□ unscaledValue () — возвращает мантиссу числа;
□ upl () — возвращает расстояние до следующего числа.
Листинг 4.7 показывает примеры использования этих методов, а рис. 4.5 — вывод результатов.
Начиная с версии Java SE 5 в класс BigDecimal введено еще много методов преобразования объекта и получения его характеристик.
Листинг 4.7. Методы классаBigDecimal в программеBigDecimalTest
import java.math.*; class BigDecimalTest{
public static void main(String[] args){
BigDecimal x = new BigDecimal("-12345.67890123456789");
BigDecimal y = new BigDecimal("345.7896e-4");
BigDecimal z = new BigDecimal(new BigInteger("123456789"), 8); System.out.println("|x| = " + x.abs());
System.out.println("x + y = " + x.add(y));
System.out.println("x / y = " + x.divide(y, BigDecimal.ROUND DOWN)); System.out.println("x / y = " + x.divide(y, 6, BigDecimal.ROUND HALF EVEN)); System.out.println("max(x, y) = " + x.max(y));
System.out.println("min(x, y) = " + x.min(y));
System.out.println("x << 3 = " + x.movePointLeft(3)); System.out.println("x >> 3 = " + x.movePointRight(3)); System.out.println("x * y = " + x.multiply(y)); System.out.println("-x = " + x.negate());
System.out.println("scale of x = " + x.scale());
System.out.println("increase scale of x to 20 = " + x.setScale(20)); System.out.println("decrease scale of x to 10 = " + x.setScale(10, BigDecimal.ROUND HALF UP));
System.out.println("sign(x) = " + x.signum());
System.out.println("x — y = " + x.subtract(y)); System.out.println("round x = " + x.toBigInteger()); System.out.println("mantissa of x = " + x.unscaledValue()); System.out.println("mantissa of 0.1 =\n= " +
new BigDecimal(0.1).unscaledValue());
}
}
 |
Рис. 4.5.Методы класса BigDecimal в программе BigDecimalTest |
Приведем еще один пример. Напишем простенький калькулятор, выполняющий четыре арифметических действия с числами любой величины. Он работает из командной строки. Программа представлена в листинге 4.8, а примеры использования калькулятора — на рис. 4.6.
Листинг 4.8. Простейший калькулятор
import java.math.*; class Calc{
public static void main(String[] args){ if (args.length < 3){
System.err.println("Usage: java Calc operand operator operand"); return;
}
BigDecimal a = new BigDecimal(args[0]);
BigDecimal b = new BigDecimal(args[2]); switch (args[1].charAt(0)){
case |
' + ': |
case |
'-': |
case |
'*': |
case |
■/' : |
default : |
System.out.println(a.add(b)); break;
System.out.println(a.subtract(b)); break; System.out.println(a.multiply(b)); break; System.out.println(a.divide(b,
BigDecimal.ROUND_HAL F_EVEN)); break; System.out.println("Invalid operator");
}
 |
Рис. 4.6.Результаты работы калькулятора |
Почему символ умножения — звездочка — заключен на рис. 4.6 в кавычки? Приверженцам ОС UNIX это понятно, а для других дадим краткое пояснение.
Это особенность операционной системы, а не языка Java. Введенную с клавиатуры строку вначале просматривает командная оболочка (shell) операционной системы, а звездочка для нее — указание подставить на это место все имена файлов из текущего каталога. Оболочка сделает это, и интерпретатор Java получит от нее длинную строку, в которой вместо звездочки стоят имена файлов, отделенные друг от друга пробелом.
Звездочка в кавычках понимается командной оболочкой как обычный символ. Командная оболочка снимает кавычки и передает интерпретатору Java звездочку, что нам и надо.
Читать дальше
Конец ознакомительного отрывка
Купить книгу