float originFloat = (float) 91950/10000;
float scaleFloat = new BigDecimal(originFloat).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
float scaleValueFloat = BigDecimal.valueOf(originFloat).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
// 当数据类型为float时,只有将float类型转为string,再进位处理才能达到四舍五入的效果
float stringValueFloat = new BigDecimal(String.valueOf(originFloat)).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
System.out.println("originFloat " + originFloat);
System.out.println("scaleFloat " + scaleFloat);
System.out.println("scaleValueFloat " + scaleValueFloat);
System.out.println("stringValueFloat " + stringValueFloat);
double originDouble = (double) 91950/10000;
float scaleDouble = new BigDecimal(originDouble).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
float scaleValueDouble = BigDecimal.valueOf(originDouble).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
System.out.println("originDouble " + originDouble);
System.out.println("scaleDouble " + scaleDouble);
System.out.println("scaleValueDouble " + scaleValueDouble);
//执行结果为:
originFloat 9.195
scaleFloat 9.19
scaleValueFloat 9.19
stringValueFloat 9.2
originDouble 9.195
scaleDouble 9.2
scaleValueDouble 9.2
综上所述,如果需要让BigDecimal正常的进行四舍五入,有两种做法:
1.new BigDecimal的时候用string:
float stringValueFloat = new BigDecimal(String.valueOf(originFloat)).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
2.用BigDecimal处理的小数的时候用double