最近,使用BigDecimal进行四舍五入时,发现setScale ()方法设置的精度值不起作用。 代码如下。
错误代码
double d=7.199999999999999;
bigdecimal decimal=new bigdecimal (string.value of (d );
decimal.setscale(2,BigDecimal.ROUND_HALF_UP );
system.out.println (decimal.scale (;
系统. out.println (decimal.doublevalue ();
system.out.println (decimal.tostring ();
上述代码目的:输出7.199999999999999,保留两位小数。 输出结果:
15
7.1999999999
7.1999999999
decimal.setscale(2,BigDecimal.ROUND_HALF_UP ); 没有发挥作用。
正确的代码
double d=7.199999999999999;
bigdecimal decimal=new bigdecimal (string.value of (d );
//重新生成了新对象
bigdecimal decimal2=decimal.set scale (2,BigDecimal.ROUND_HALF_UP );
system.out.println (“—————decimal 13354———”
system.out.println (decimal.scale (;
系统. out.println (decimal.doublevalue ();
system.out.println (decimal.tostring ();
system.out.println (“—————decimal 23354———”;
system.out.println (decimal2. scale (;
系统. out.println (decimal2. doublevalue ();
系统. out.println (decimal2. tostring ();
与错误代码不同,decimal2接收decimal.setscale(2,BigDecimal.ROUND_HALF_UP )的结果,并操作decimal2以输出以下内容:
—————decimal1————-
15
7.1999999999
7.1999999999
—————decimal2————-
2
7.2
7.20
总结
decimal.setscale(2,BigDecimal.ROUND_HALF_UP )生成新对象。 请注意,设置的精度值仅对新对象有效,对原始对象无效。 通常,可以使用链式方法创建新对象并设置精度。
bigdecimal decimal=new bigdecimal (string.value of (d ) ).setScale(2) 2,bigdecimal.round _ half _ u u u up );