bigdecimal会转科学计算法吗 (bigdecimal怎么定义一个具体值)

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。对于Double类型的运算,通常使用此类处理,来有效避免精度问题。

正文

基本运算

加减乘除方法返回的是BigDecimal型数据:.add(),.subtract(),.multiply(),.divide();

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

比较大小

compareTo方法返回的是一个int型数据:-1 小于; 0 等于; 1 大于。

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

舍位

.setScale(scale,roundingMode)方法中:scale表示精确位数,roundingMode表示舍入模式;

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

格式化

NumberFormat(),DecimalFormat():可以通过自定义方式,限制输出数据的类型和精度,就像定义时间的Formate方法一样;

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

科学计数

.toPlainString()方法返回String类型数据:可将Excel表格中导入的科学计数法轻松地转换成十进制数;

bigdecimal读出来的数值不精确,bigdecimal平均值怎么计算

注意

BigDecimal的加减乘除操作,其实最终返回的都是一个新的BigDecimal对象,因为BigDecimal都是不可变的的(BigInteger同理);

如果用BigDecimal做除法,一定要在divide()方法中传递第二个参数scale,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出ArithmeticException异常。

小结

  1. 凡是涉及到精确计算的地方,要使用BigDecimal;
  2. 建议每个项目中,都要提前准备一个BigDecimal计算的utils类;
  3. 尽量使用参数类型为String的构造函数,避免计算误差(即使是Double数据,其实也是先被toString处理了);
  4. BigDecimal是不可变的,在进行每一步运算时,都会产生一个新的对象。