在开发中高精度运算使用并非非常频繁,float和double的精度实际上能够满足绝大多数需要,且高精度运算效率比常规的运算要慢一点,但使用高精度运算往往是为了使用其中便捷的API。官方提供的高精度运算的类主要两个
BigInteger:当数值范围超过long时使用 BigDecimal:几乎涵盖BigInteger功能,还可以保留小数点任意位数,理论上精度无穷大,以下主要说明此类 注:两者API很相似
加减乘除
BigDecimal aaa = new BigDecimal(20);
BigDecimal bbb = new BigDecimal(3);
BigDecimal aaa.add(bbb):加法运算,返回运算后结果
BigDecimal aaa.subtract(bbb):减法运算,返回运算后结果
BigDecimal aaa.multiply(bbb):乘法运算,返回运算后结果
BigDecimal aaa.divide(bbb):除法运算,返回运算后结果
保留小数点
主要针对除法运算,可能存在无限小数,若不进行舍入操作会报错
BigDecimal result = aaa.divide(bbb, 8, BigDecimal.ROUND_HALF_UP);
参数1:除数
参数2:保留的精度,要求保留几位小数
参数3:舍入模式,常用几种舍入方式
BigDecimal.ROUND_HALF_UP:四舍五入
BigDecimal.ROUND_CEILING:舍入上限值,比如结果为1.1,则会返回2
BigDecimal.ROUND_FLOOR:舍入下限值,比如结果为1.8,则会返回1
其他API
* *Value():转换成基本数据类型,比如aaa.intValue(),aaa.doubleValue()等
BigInteger toBigInteger():转换成BigInteger类型
BigDecimal.ZERO:代表0
BigDecimal.ONE:代表1
BigDecimal.TEN:代表10