Подтвердить что ты не робот

Какой тип переменной можно использовать для хранения огромных чисел (30 + цифр) в java?

Есть ли действительно большой тип переменной, который я могу использовать в Java для хранения огромных чисел (до сорока цифр)?

long максимальное значение - 9223372036854775807, что составляет 19 цифр - не достаточно большое.

Я пытаюсь создать калькулятор, который может обрабатывать большие числа, потому что в большинстве случаев в наши дни может храниться недостаточно 10 цифр или около того, и я хочу получить точные вычисления с номерами гораздо большей величины

ИЗМЕНИТЬ

Спасибо за ответы. Я могу использовать BigInteger для больших целых чисел, единственным ограничением является память компьютера (должно быть достаточно). Для десятичных знаков я буду использовать float ^ e, как предложил @WebDaldo, или BigDecimal (аналогично BigInteger), как предположил @kocko.

4b9b3361

Ответ 1

Вы можете использовать BigInteger класс.

BigInteger bi1 = new BigInteger("637824629384623845238423545642384"); 
BigInteger bi2 = new BigInteger("3039768898793547264523745379249934"); 

BigInteger bigSum = bi1.add(bi2);

BigInteger bigProduct = bi1.multiply(bi2);

System.out.println("Sum : " + bigSum);
System.out.println("Product : " + bigProduct);

Вывод:

Сумма: 3677593528178171109762168924892318

Продукт: 1938839471287900434078965247064711159607977007048190357000119602656

Я должен упомянуть BigDecimal, что отлично подходит для вычислений суммы, сравнимых с double.

BigDecimal bd = new BigDecimal("123234545.4767");
BigDecimal displayVal = bd.setScale(2, RoundingMode.HALF_EVEN);

NumberFormat usdFormat = NumberFormat.getCurrencyInstance(Locale.US);        
System.out.println(usdFormat.format(displayVal.doubleValue()));

Вывод:

$123,234,545.48

Ответ 2

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

Для операций с плавающими числами Java предоставляет класс BigDecimal, который также может быть полезен.

Ответ 3

Для расчетов с показателями, как и в калькуляторе, вы должны использовать BigDecimal. Проблема с BigInteger заключается в том, что он обрабатывает только целые числа (без дробных чисел) и что для действительно больших чисел, таких как 10 ^ 100, он сохраняет все нули, используя большую память, вместо использования формата, основанного на научной нотации.

В качестве альтернативы вы можете использовать тип числа с плавающей запятой double, который дает вам большой диапазон значений, низкое использование памяти и быстрые операции. Но из-за проблем округления и ограниченной точности (около 16 десятичных цифр) я бы не рекомендовал использовать его, если вы действительно не знаете, что делаете.

Ответ 4

Вы можете использовать float ^ e

чтобы вы могли

0.55342663552772737682136182736127836782163 * 10^e

В основном используются калькуляторы.

Ответ 5

Это для всех больших чисел выше 15, так как использование int ударяет его. Вы можете найти факториал 50 или 100 0r 500.

// Recursive version of the Fat factorial for bigger numbers ex: Factorial of 500     
BigInteger fatFactorial(int b) {
    if (BigInteger.ONE.equals(BigInteger.valueOf(b))
        || BigInteger.ZERO.equals(BigInteger.valueOf(b))) {
            return BigInteger.ONE;
    } else {
        return BigInteger.valueOf(b).multiply(fatFactorial(b - 1));
        }
    }