转:http://blog.youkuaiyun.com/fanfanjin/article/details/6908333
说的比较全面,但里面float四舍五入使用BigDecimal的方式有误,应为以下:
float d = 18896.45f;
BigDecimal b = new BigDecimal(Float.toString(d));
System.out.println(b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue());
红色代码不能使用强制转换(double) d,一样会有精度损失。