double f = 1.155;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
f=0.155 打印结果等于 0.15
f=1.155 打印结果等于 1.15
f=2.155 打印结果等于 2.15
f=3.155 打印结果等于 3.15
f=4.155 打印结果等于 4.16
而且一会后 1.155 打印出 1.16 - -
感觉就像闹着玩似的
你把
double f = 1.155;
改成String f = "1.155";
之后,就不会存在你说的问题。你需要了解下 浮点数的精度缺失问题,然后知道为什么有些浮点数在内存中计算机无法表示 —— 一开始就是无法表示的,那么你把它作为参数传递给
BigDecimal
,BigDecimal
也只能按照内存中存在的东西来处理。