1. 程式人生 > >java保留小數點後四舍五入的問題

java保留小數點後四舍五入的問題

四舍五入

在Java中使用一些方法進行四舍五入會出現和預期不同的結果,這是因為這些方法使用的原則實際為:四舍六入五考慮,五後非零就進一,五後皆零看奇偶,五前為偶應舍去,五前為奇要進一。

1.四舍六入五考慮時出現五的情況

double f=9.545d;
System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println(new java.text.DecimalFormat("#.00").format(f));
System.out.println();
f=9.555d;
System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println(new java.text.DecimalFormat("#.00").format(f));
System.out.println();
f=9.5551d;
System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println(new java.text.DecimalFormat("#.00").format(f));

運行結果:
9.54
9.54

9.55
9.55

9.56
9.56

2.四舍五入時出現五的情況

double f=9.545d;
System.out.println(String.format("%.2f", f));
System.out.println(Math.round(f*100)*0.01);
System.out.println();
f=9.555d;
System.out.println(String.format("%.2f", f));
System.out.println(Math.round(f*100)*0.01);
System.out.println();
f=9.5551d;
System.out.println(String.format("%.2f", f));
System.out.println(Math.round(f*100)*0.01);

運行結果:
9.55
9.55

9.56
9.56

9.56
9.56

所以,從上邊運行的情況來看,如果需要嚴格遵守四舍五入,需要使用第二種情況才可以。(ps:這裏順便提一下,js中使用toFixed其實是四舍六如五考慮的情況,如果希望嚴格的四舍五入,可以使用(Math.round(a*100)/100).toFixed(2)。但是mysql的ROUND方法卻是四舍五入的)

本文出自 “塞上名豬” 博客,請務必保留此出處http://zuohao1990.blog.51cto.com/6057850/1971437

java保留小數點後四舍五入的問題