java超长的整型如何计算?(加减乘除)

我们知道java的int和long类型是有最大限制的;

用以下代码就可以知道最大值:

System.out.println("int 最大值为 :" + Integer.MAX_VALUE);
System.out.println("long 最大值为 :" + Long.MAX_VALUE);

int与Integer的区别:Interger可以理解为int的包装类

区别么:

看看这个:https://blog.csdn.net/teacher_lee_zzsxt/article/details/79230501

 

有时候我们需要进行很长很长的数据计算怎么办?

我查了以下资料发现java有BigInteger这个神奇的东西,据说他的长度是无限的,话不多说超长整型的加减乘除如何计算的呢?

看代码:

BigInteger a = new BigInteger("118267971872897864968268");
BigInteger b = new BigInteger("17187392768826381");
System.out.println("加法: "+ a.add(b));
System.out.println("减法: "+ a.subtract(b));
System.out.println("乘法: "+ a.multiply(b));
System.out.println("除法: "+ a.divide(b));

为了验证一下BigInteger是否真的是无限大,我做了如下简单的测试:

BigInteger a = new BigInteger("1");
while(true)
{
    System.out.println(a);
    a = a.multiply(new BigInteger("10"));
    Thread.sleep(500);
}

注意Thread.sleep(500);的作用是每次运行到这里的时候休息500毫秒,注意单位是毫秒不是秒,这样的目的是便于我们观察。这是线程进程里面学到的东西,不懂得可以自行查查资料:

结果么随便抓个图:

顺便提一下我发现了win10快速打开截图工具的快捷键,win+shift+S;

java超长的整型如何计算?(加减乘除)_第1张图片

好吧确实比较懒没有等到最后就让他强制性结束了(按图片最上面右边×左边那个正方形按钮),不过这个数据已经足够大了

整型的加减乘除搞定了,那么双精度类型的呢?

我找到了BigDecimal类,不知道对不对,测试一下:

BigDecimal a = new BigDecimal("1628179.28173891863718963818");
BigDecimal b = new BigDecimal("-15.1792836819819637267863789");
System.out.println("加法: "+ a.add(b));
System.out.println("减法: "+ a.subtract(b));
System.out.println("乘法: "+ a.multiply(b));
//System.out.println("除法: "+ a.divide(b));

然而除了除法出现了一点问题其他完全没毛病

测试了几次,发现将除数改的小一点:比如15或者15.0就没毛病了,就算改成比较大的整型也会出问题

java超长的整型如何计算?(加减乘除)_第2张图片

这次被除数没变。除数从1慢慢变大(+1)结果除到6就炸了,暂时还搞不懂为什么,看了一下官方文档:

emmmm,看不懂,大佬们自己看看;

 

你可能感兴趣的:(java学习历程)