在java中,我可以使用什么样的变量类型来保存巨大的数字(30多个数字)



在Java中有没有一种真正的大变量类型可以用来存储巨大的数字(最多40位)?

long的最大值是9223372036854775807,这是19位数字,还远远不够大。

我正在尝试创建一个可以处理大数字的计算器,因为现在大多数计算器只能容纳不足的10位数左右,我想要使用更大幅度的数字进行准确的计算

编辑

谢谢你的回答。我可以对大整数使用BigInteger,唯一的限制是计算机的内存(应该足够)。对于小数,我会像@WebDaldo建议的那样使用float^e,或者像@kocko建议的那样,使用BigDecimal(类似于BigInteger)。

您可以使用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

产品:1938839471287900434078965247064711159607977007048119035700119602656

我应该提到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()));

输出:

123234545.48美元

您可以尝试将BigInteger类用于具有非常大整数的运算。

对于使用浮点数的运算,Java提供了BigDecimal类,它也很有用。

对于使用指数的计算,就像在计算器中使用的一样,应该使用BigDecimalBigInteger的问题是它只处理整数(不处理小数),而对于像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));
        }
    }

最新更新