Java DecimalFormat四舍五入的坑及正确用法
生活随笔
收集整理的這篇文章主要介紹了
Java DecimalFormat四舍五入的坑及正确用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、DecimalFormat四舍五入的坑
1.1 有時候我們在處理小數保留幾位小數時,想到了DecimalFormat這個類的使用,百度搜一把可能用到以下方式。
1 public static void main(String[] args) {
2 String str="3.145";
3 System.out.println(round1(str));
4 }
5
6 static String round1(String str){
7 double a=Double.parseDouble(str);
8 DecimalFormat df=new DecimalFormat("###.00");
9 return df.format(a);
10 }
1.2 初看好像沒什么問題,四舍五入保留兩位小數,最后輸出3.15。當然精度要求不高,也無需計較。當涉及到精確統計時,這里的坑來了將上面的字符串改為“5”前面為奇數,如“3.155”,就瓜了,輸出3.15。顯然這里沒滿足要求,不是我們學校里的四舍五入。再上一段代碼。
1 static String round2(String str){
2 double a=Double.parseDouble(str);
3 DecimalFormat df=new DecimalFormat("###.00");
4 df.setRoundingMode(RoundingMode.HALF_UP);
5 return df.format(a);
6 }
這里可以看到這個setRoundingMode()方法可以設定四舍五入的模式,原來四舍五入不光有我們學校里學的那種,還有其他模式。DecimalFormat默認情況下,它使用 RoundingMode.HALF_EVEN,此舍入模式也稱為“銀行家舍入法”,主要在美國使用。RoundingMode.HALF_UP這個模式才是我們學校里學的標準四舍五入模式。以上代碼雖然舍了學校型模式仍然不準確,應該將double類型改為BigDecimal類型。
二、學校型四舍五入幾種正確使用
2.1 String直接格式化
1 static String round3(String str){
2 double d=Double.parseDouble(str);
3 return String.format("%.2f",d);
4 }
2.2 BigDecimal結合DecimalFormat,BigDecimal比較好性能,數據處理量大不建議使用。
1 static String round4(String str){
2 BigDecimal bigDecimal=new BigDecimal(str);
3 DecimalFormat df=new DecimalFormat("###.00");
4 df.setRoundingMode(RoundingMode.HALF_UP);
5 return df.format(bigDecimal);
6 }
2.3 BigDecimal單獨使用,這個類也自帶舍入模式設定方法。
1 static String round5(String str){
2 BigDecimal bigDecimal=new BigDecimal(str);
3 return String.valueOf(bigDecimal.setScale(2,RoundingMode.HALF_UP));
4 }
總結
以上是生活随笔為你收集整理的Java DecimalFormat四舍五入的坑及正确用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业付款到零钱(微信小程序提现,用户提现
- 下一篇: jQuery.post() 函数格式详解