Какой тип переменной я могу использовать для хранения огромных чисел (30+ цифр) в java?
есть ли действительно большой тип переменной, который я могу использовать в Java для хранения огромных чисел (до сорока цифр)?
long
максимальное значение-9223372036854775807, что составляет 19 цифр-недостаточно большой.
Я пытаюсь создать калькулятор, который может обрабатывать большие числа, потому что большинство в настоящее время может содержать только недостаточные 10 цифр или около того, и я хочу, чтобы точные вычисления с номерами намного больше величина
редактировать
Спасибо за ответы. Я могу использовать BigInteger
для больших целых чисел единственным ограничением является память компьютера (должно быть достаточно). Для десятичных знаков я буду использовать float
^e, как предложил @WebDaldo, или BigDecimal
(подобно BigInteger), как предложил @kocko.
5 ответов
можно использовать 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, что отлично подходит для расчета суммы сравнить с двойной.
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
вы можете попробовать использовать BigInteger класс для работы с очень большими числами целыми.
для операций с плавающими числами Java предоставляет BigDecimal класс, который также может быть полезен.
для расчетов с показателями, как вы бы использовали в калькуляторе, вы должны использовать BigDecimal
. Проблема с BigInteger
это то, что он обрабатывает только целые числа (без дробных чисел), и что для действительно больших чисел, таких как 10^100, он хранит все нули, используя много памяти, вместо использования формата, основанного на научной нотации.
вы можете использовать числа с плавающей точкой типа double
, что дает вам большой диапазон значений, низкое использование памяти и быстрый оперативный. Но из-за проблем округления и ограниченной точности (около 16 десятичных цифр) я бы не рекомендовал использовать его, если вы действительно не знаете, что делаете.
вы можете использовать float ^e
таким образом, вы могли бы
0.55342663552772737682136182736127836782163 * 10^e
калькуляторы в основном используют это тоже.
Это для всех больших чисел выше 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));
}
}