BigDecimal在java开发中,用来表示精确的数字,常用于金融相关字段,但是使用过程中有一些问题需要注意。
使用String构造函数,而不是Double。
因为Double是非精确类型,由于Double丢失精度可能导致BigDecimal无法接收到精确的原始数字。
使用String参数的构造函数时,注意使用trim去掉空格,防止出现NumberFormatException异常。
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("1.1 "); //1.1后面的空格导致出现NumberFormatException
System.out.println(b1.toPlainString());
}
}
由于精度不一致很难直接判断2个BigDecimal是否相等
可以将精度设置成一样的再判断是否相等
BigDecimal scaled = num.setScale(2, RoundingMode.HALF_UP); //设置成合适的精度再判断是否相等
toString可能输出科学计数的格式
直接用toString输出可能输出科学基数的格式,因此最好使用DecimalFormat进行格式化输出:
BigDecimal num = new BigDecimal("0.000000123");
DecimalFormat df = new DecimalFormat("0.000000000");
System.out.println(df.format(num)); // 0.000000123(避免科学计数法)

349

被折叠的 条评论
为什么被折叠?



