[Java] BigDecimal的使用

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
需要注意的是,它的浮点幂结果依然存在误差。

后续补充。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容