Bigdecimal四舍五入转化问题
在项目中遇见个问题;具体代码如下:
public static void main(String[] args) {
Float f = 0.45f;
// BigDecimal b1 = new BigDecimal(f.toString());
BigDecimal b1 = BigDecimal.valueOf(f);
System.out.println(b1);
System.out.println(b1.setScale(1, RoundingMode.HALF_UP));
System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_UP));
}
运算的结果为:
可以看见将Float直接转为BigDecimal会出现精度丢失的情况;本来四舍五入因为为0.5的,因为精度丢失导致结果为0.4;所以不能将Float,Double直接转为BigDecimal;需要先转为String,然后再转为BigDecimal;
记一下这个bug;