BigDecimal
BigDecimal位于java.math.BigDecimal包,用于处理浮点数高精度运算,常用的操作支持加减乘除指数等。
PS:因为有机会需要使用BigDecimal进行浮点幂运算,查了一些资料,记录一下。
常用初始化
一、使用double类型去直接初始化。
private BigDecimal num = new BigDecimal(1.2);
但是这种方法生成的BigDecimal并不是精确的double值,和double类型在内存中的二进制有关,如果要使用精确的double值,应该用第二种方法。
二、使用String类型初始化
private BigDecimal num = new BigDecimal(Double.toString(1.2));
这样BigDecimal的值为精确值。
四则运算
加减乘除分别对应为以下方法:add, subtract,multiply,divide
方法的返回值都是一个新的BigDecimal对象,而不是更新原对象。
当除法运算遇到除不尽的情况,必须指定精度范围和舍入的方式,否则异常:
num = num.divide(new BigDecimal(Double.toString(0.9)), 10, BigDecimal.ROUND_HALF_DOWN);
幂运算
BigDecimal只支持的整数幂运算:
num = num.pow(3);
如果必须要使用浮点幂操作,可以使用以下开源库:
http://www.mpia.de/~mathar/progs/jdocs/org/nevec/rjm/BigDecimalMath.html
需要注意的是,它的浮点幂结果依然存在误差。
后续补充。