我们知道java的int和long类型是有最大限制的;
用以下代码就可以知道最大值:
System.out.println("int 最大值为 :" + Integer.MAX_VALUE);
System.out.println("long 最大值为 :" + Long.MAX_VALUE);
int与Integer的区别:Interger可以理解为int的包装类
区别么:
看看这个:https://blog.youkuaiyun.com/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;
好吧确实比较懒没有等到最后就让他强制性结束了(按图片最上面右边×左边那个正方形按钮),不过这个数据已经足够大了
整型的加减乘除搞定了,那么双精度类型的呢?
我找到了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就没毛病了,就算改成比较大的整型也会出问题
这次被除数没变。除数从1慢慢变大(+1)结果除到6就炸了,暂时还搞不懂为什么,看了一下官方文档:
emmmm,看不懂,大佬们自己看看;