for (double i = 511.55; i < 2050.55; i++) {
BigDecimal bd = new BigDecimal(i);
bd =bd.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(bd.doubleValue());
}
512-2048 之内的值 四舍五入不对 全部舍位了.没有进位
是不是电脑的问题?
ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2
ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1
for (double i = 511.55; i < 2050.55; i++) {
是你这i定义的问题,i是double,本身就不精确,你认为的0.55可能是0.549999999
所以变成4舍了。你可以打印i出来看看
BigDecimal没有四舍五入这个功能
做这种判断最好不要使用界点值来,数值存在的极限,经常会int i=1;打印时0.99999999999999999999999999这种极限情况
楼上正解,浮点类型不是那么精确