Классы BigDecimal и BigInteger в Java

Как правило, Java-программа состоит из методов и переменных, а последние делятся на 2 типа – целые и «вещественные числа». Их различие кроется лишь во вмещаемых значениях. Наиболее значение у класса целых принимает переменная long – от -9223372036854775808 до 9223372036854775807.

В случае с «вещественными числами», наибольший показатель имеет double, который составляет диапазон от 1.7e-308 до 1.7e+308. Однако, что необходимо делать, когда требуется сохранять числа, большие этого значения? Для этого и потребуется использовать BigInteger и BigDecimal, о которых пойдет речь в этой статье.

JavaLanguage – описание пакетов BigDecimal и BigInteger

Сперва стоит разобраться с BigInteger. Этот класс не имеет ограничения в 64 бита, имеет произвольную длину. Данная составляющая кода является наследником Number, как и целые перменные вроде Integer, Double и остальные. Следовательно, данный класс может реализовать методы, приводящие к простым типам:

BigInteger value = new BigInteger(«32145»);

intintValue = value.intValue();//32145

long longValue = value.longValue();//32145

double doubleValue = value.doubleValue();//32145.0

Конструктор у класса BigInteger далеко не один. А потому, можно применять его для разных случаев. Если проще сказать – «На все случаи жизни», так как возможно, возникнет какой угодно сценарий.

Иногда может случаться такое, что простые типы не в состоянии сохранить все данные из BigInteger, ввиду чего произойдет урезание диапазона. Причем примется максимум значения, который доступен для примитивного типа.

Есть также аналоги методов для работы. Их отличие заключается в действиях с типом – если он не вмещает полный диапазон информации с BigInteger, то вбрасывается ArithmeticException.

Касательно констант для BigInteger – стоит выделить несколько таковых:

BigInteger.ZERO
BigInteger.ONE
BigInteger.TEN

Их значения уже известны из названий. То есть, BigInteger.ZERO – 0, BigInteger.ONE – 1, а BigInteger.TEN – 10.

Основная информация по первому классу разобрана. А значит, стоит перейти к изучению BigDecimal. Здесь, как по названию уже видно, есть что-то общее. А что же это – пользователь сам поймет после прочтения материала далее.

BigDecimal используется уже для замены double. Как правило, применение такого класса нужно во время работы с финансовыми данными. По аналогии с BigInteger, BigDecimal используется для вещественного числа произвольной длины.

BigDecimal также является наследником Number. Возвращаются методы в виде определенного примитивного вида. Выглядит же это таким простым образом в консоли:

BigDecimalvalue=newBigDecimal(35563.3);

LonglongValue=value.longValue();//35563

DoubledoubleValue=value.doubleValue();//35563.3

После запятой в строке с Long отбрасываются все знаки. Потому, программа станет считать целое значение. Об этом и говорится в описании и принадлежности Longк целым переменным.

В случае с конструкторами BigDecimal все более разнообразно. Можно использовать разные средства, к примеру, для задания значения какого-либо объекта. Либо же приготовить параметры создаваемого элемента. Их много, но все они — основные.

Вот самый основной вариант кода:

BigDecimalfirstValue = newBigDecimal(«455656.545»);//455656.545

Здесь было установлено количество символов после запятой(точки). Это, как уже понятно, определяет возможность более точного показа.

BigDecimalsecondValue = new BigDecimal(3445.54);//3445.5399999999999636202119290828704833984375

В конструкции рекомендуется использовать также String. А все обусловлено тем, что Double – неоднозначный тип данных. Значит, точности можно особо не ожидать.

BigDecimalthirdValue = newBigDecimal(3445.554645675444, MathContext.DECIMAL32);//3445.555

Задавая Double, также нужно установить округление. Это необходимо, чтобы избежать запутанных значений, в случае такой необходимости.

char[] arr = new String(«455656.545»).toCharArray();

BigDecimalfourthValue = new BigDecimal(arr, 2, 6);//5656.5

Далее – задается массив знаков, с которого доставляется информация для объекта, а также сколько таковых берется.

BigDecimalfifthValue = new BigDecimal(new BigInteger(«44554»), 3);//44.554

Остается только взять существующий уже класс BigInteger, чтобы установить количество знаков после запятой.

Классы BigInteger и BigDecimal – подробный разбор(методы)

Чтобы подробнее разобраться с обоими классами, стоит приступить к изучению их методов работы. Для каждого их достаточно, чтобы работать без сложностей. Вот, к чему может прибегнуть человек во время взаимодействия с BigInteger:

BigIntegerfirstValue = new BigInteger(«37995»);
BigIntegersecondValue = new BigInteger(«35466»);
BigIntegerresultValue= firstValue.add(secondValue);//73461

Это операции суммирования.

BigIntegerfirstValue = new BigInteger(«37995»);
BigIntegersecondValue = new BigInteger(«35466»);
BigIntegerresultValue= firstValue.multiply(secondValue);//1347530670

Такие действия необходимы для умножения.

BigIntegerfirstValue = new BigInteger(«37995»);
BigIntegersecondValue = new BigInteger(«35466»);
BigIntegerresultValue= firstValue.remainder(secondValue);//2529

С помощью такого кода возможно вычислить остаток при делении чисел друг на друга.

BigIntegerfirstValue = new BigInteger(«-37995»);
BigIntegerresultValue= firstValue.abs();//37995

Такими командами возможно получить модульное число. Оно же не имеет знака. Теперь стоит перейти к более сложным операциям. Их несколько и для изучения может потребоваться больше времени. Однако, в некоторых ситуациях они хорошо помогут. Вот их перечень:

BigIntegerfirstValue = new BigInteger(«-34»);
BigIntegersecondValue = new BigInteger(«5»);
BigIntegerresultValue = firstValue.mod(secondValue); //1

Данный кусок кода позволяет производить вычисление mod. Также, есть вариации данной функции. Вот они:

BigIntegerfirstValue = BigInteger.probablePrime(8, new Random());//211
BigIntegersecondValue = BigInteger.probablePrime(16, new Random());//42571

Это позволит получить случайное число с заданием битности результата. Также, у BigInteger есть операции побитовых сдвигов. Вот оба варианта:

BigIntegerfirstValue = new BigInteger(«5»);
BigIntegerfirstResultValue = firstValue.shiftLeft(3);//40

Это отвечает за сдвиг влево.

BigIntegersecondValue = new BigInteger(«34»);
BigIntegersecondResultValue = secondValue.shiftRight(2); //8

А так возможно произвести сдвиг в правую сторону. Теперь стоит перейти к методам с другим классом – BigDecimal. Его функции отличаются от того же BigInteger тем, что не позволяют настраивать битность, а дополнительно – позволяют настраивать «плавающую» запятую у числа. Вот, что доступно пользователю для работы:

BigDecimal value = new BigDecimal(«454334.34334»);
int result = value.precision();//11

Так можно получить точность(количество чисел);

BigDecimalfirstValue = new BigDecimal(3445.544445);

BigDecimalsecondValue = firstValue.setScale(3,BigDecimal.ROUND_CEILING);//3445.545

Устанавливая такие значения, человек получает возможность округления и отделения чисел до запятой и после нее.

Вот так делается деление одного BigDecimal на другой BigDecimal, а также устанавливается количество чисел после запятой и правило округления получившегося значения:

BigDecimalfirstValue = new BigDecimal(«455656.545»);

BigDecimalsecondValue = new BigDecimal(3445.544445);

BigDecimal result = firstValue.divide(secondValue, 2,RoundingMode.DOWN);//132.24

Так перемещается запятая на определенное количество цифр вправо или влево:

BigDecimal value = new BigDecimal(«455656.545»);
BigDecimalfirstResult = value.movePointRight (2);//45565654.5
BigDecimalsecondResult = value.movePointLeft (2);//4556.56545

С помощью такой команды можно убрать оставшиеся нули в конце:

BigDecimal value = new BigDecimal(«45056.5000»);
BigDecimal result = value.stripTrailingZeros();//45056.5

Благодаря таким методам и производится работа с обоими классами. Человек может запросто взаимодействовать с ними и легко справляться с разными операциями. И весь материал по обоим классам поможет в работе с кодом с BigInteger и BigDecimal.

Образовательный портал 3TY.RU
Adblock
detector