如果需要精确的结果,请使用精确的类型:
double val = 3.9 - (3.9 % 0.1); System.out.println(val); // 3.8000000000000003 BigDecimal x = new BigDecimal( "3.9" ); BigDecimal bdVal = x.subtract( x.remainder( new BigDecimal( "0.1" ) ) ); System.out.println(bdVal); // 3.9
为什么是3.8000 …
003?因为Java使用FPU来计算结果。3.9不可能以IEEE双精度表示法精确存储,因此它存储3.89999…。3.8999%0.01给出0.09999
…因此结果比3.8大一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)