日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Java DecimalFormat四舍五入的坑及正确用法

發布時間:2025/3/8 编程问答 37 如意码农
生活随笔 收集整理的這篇文章主要介紹了 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四舍五入的坑及正确用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。