写技术文章之前的话
这是自己第一次写csdn博客,在写具体的技术文章之前想先说点关于写博客的事情。
我想写博客的这个想法在脑海里存在已经很久了,但是一直没有动笔去写。我觉得一方面因为自己有完美主义倾向,觉得没“准备好”。但是怎么才算“准备好”呢?这个问题我自己没有答案。所以我自己得到一个结论,那就是不要等“准备好”啦。另一方面是因为没有自信,觉得写不出高质量的博客。这个问题我认为先开始写博客,如果质量不高,那就慢慢改进。不能因为这样不去写。因为不自信不去写有点“因噎废食”。
通过写博客,既可以让自己巩固知识,还可以把知识分享给别人。不亦乐乎!
下面进入正题,介绍java中不常见的几个类
BigInteger的使用
BigInteger并非一个常见的类,但有时却有需要用到它的地方。
概述
首先看官方文档描述,Immutable arbitrary-precision integers,即不可变的任意精度整数。它可以表示int和long表示不了的整数。如何使用BigInteger
BigInteger里可以把代表任意精度的整数的字符串传入构造函数构建对象,这样就可以表示任意精度的整数,并且可以通过创建出来的对象进行加,减,乘,除运算。并且可以通过对象的divideAndRemainder()方法获得含有商和余数的数组。代码如下所示:
package cn.lpw;
import java.math.BigInteger;
public class Demo_BigInteger {
public static void main(String[] args) {
BigInteger b1 = new BigInteger("100");
BigInteger b2 = new BigInteger("3");
System.out.println(b1); //打印b1代表的整数的值
System.out.println(b1.add(b2)); //打印b1与b2的和
System.out.println(b1.subtract(b2)); //打印b1与b2的差
System.out.println(b1.multiply(b2)); //打印b1与b2的积
System.out.println(b1.divide(b2)); //打印b1与b2的商
BigInteger[] arr = b1.divideAndRemainder(b2); //获取b1除以b2的商与余数的数组
for (int i = 0; i < arr.length; i++) { //遍历数组
System.out.println(arr[i]);
}
}
}
结果如下图所示
BigDecimal
概述
官方文档的描述:Immutable, arbitrary-precision signed decimal numbers,即不可变的任意精度有符号小数。计算机存储数据是以二进制的形式,是所以可能存在有些小数,不能准确表示,这样计算的时候就会出现因精度产生运算数据不准确。
如何使用BigDecimal
通过构造方法将小数的字符串形式传入,进行运算,不会丢失精度。或者通过静态方法valueOf()将double数传入进行运算。
代码如下所示:
package cn.lpw;
import java.math.BigDecimal;
public class Demo_BigDecimal {
public static void main(String[] args) {
System.out.println(3.0 - 2.1);
BigDecimal b1 = new BigDecimal(3.0);
BigDecimal b2 = new BigDecimal(2.1);
System.out.println(b1.subtract(b2));
BigDecimal b3 = new BigDecimal("3.0");
BigDecimal b4 = new BigDecimal("2.1");
System.out.println(b3.subtract(b4));
BigDecimal b5 = BigDecimal.valueOf(3.0);
BigDecimal b6 = BigDecimal.valueOf(2.1);
System.out.println(b5.subtract(b6));
}
}