1. 程式人生 > >Java 保留兩位小數(BigDecimal和DecimalFormat用法)

Java 保留兩位小數(BigDecimal和DecimalFormat用法)

萌新今晚用java刷題時候,發現讓人保留兩位小數的題,查百度之後發現有四種方法。然而我覺得我百度到的方法我都看不懂(´-ι_-`)。於是在我多方查證以及自我實驗之後總結兩個好使的法子。

BigDecimal 的roundMode 舍位模式

//BigDecimal四捨五入法保留兩位小數
import java.math.BigDecimal;
import java.math.RoundingMode;
 
public class Main {
    public static void main(String[] args) {

        double number=3.1415926
; BigDecimal n = new BigDecimal(number); n = n.setScale(2, RoundingMode.HALF_UP);//詳見下面補充的的RoundingMode.XXX各種用法 System.out.println(n); } }
  • RoundingMode.CEILING:向右取整  //簡單理解ceiling 美[ˈsilɪŋ] n.最高限度
  • 3-1->3
  • -5.4->-4
  • RoundingMode.FLOOR:向左取整
  • 1.9->1
  • -5.3->-6
  • RoundingMode.DOWN:向0取整  //即負數向右取整,正數向左取整
  • 1.6->1
  • -1.6->-1
  • RoundingMode.UP:遠離0取整  //即負數向左取整,正數向右取整
  • RoundingMode.HALF_DOWN :五舍六入
  • -1.5->-1
  • 1.5->1
  • 1.6->1
  • RoundingMode.HALF_UP :四捨五入
  • RoundingMode.HALF_EVEN :四捨六入五取偶  //稱為“銀行家舍入法”
  • 1.14->1.1
  • 1.16->1.2
  • 1.15->1.2
  • 1.25->1.2
  • 1.2354->1.24(保留2位小數)

銀行家舍入法:當捨去位的數值小於5時,直接捨去該位;當捨去位的數值大於等於6時,在捨去該位的同時向前位進一;當捨去位的數值等於5時,如果前位數值為奇,則在捨去該位的同時向前位進一,如果前位數值為偶,則直接捨去該位。
  簡單說就是:四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一

DecimalFormat方法

import java.text.DecimalFormat;
 
public class Main {
    
    public static void main(String[] args) {
    	DecimalFormat a = new DecimalFormat("0.0");   
    	DecimalFormat b = new DecimalFormat("#.#");   
    	DecimalFormat c = new DecimalFormat("000.000");   
    	DecimalFormat d = new DecimalFormat("###.###"); 
    	DecimalFormat e1 = new DecimalFormat("000000.###");  
    	DecimalFormat e2 = new DecimalFormat("000,000.###");  
    	System.out.println(a.format(12.34));   //結果12.3
    	System.out.println(b.format(12.34));   //結果12.3
    	System.out.println(c.format(12.34));   //結果012.340
    	System.out.println(d.format(12.34));   //結果12.34
    	System.out.println(e1.format(12.34));  //結果000012.34
    	System.out.println(e2.format(12.34));  //結果000,012.34
       }
  }
  • DecimalFormat 是 NumberFormat 的一個具體子類,用於格式化十進位制數字
      以上舉的舉個例子可以發現一些規律,但是我總結的很囉嗦,(´・ω・`)可能你們看了更糊塗,所以你們自悟吧。

##昇華一下
  ヽ(•̀ω•́ )ゝBigDecimal和DecimalFormat到底有什麼區別呢?看圖自悟
  這裡寫圖片描述
  第一個註釋打錯了(宣告一個雙精度變數),(´-ι_-`)懶得重新截圖了,無視他。
  總之: 當我們在java中用到float或者double的時候,總會遇到保留幾位小數的問題,簡單來說DecialFormat治標不治本,只改變了原來數字顯示的狀態,數仍舊是那個數;而BigDecimal是將這個數從根本上改變。

最後(•̀ᴗ•́)و ̑̑ 我是蘿莉安,一個想做程式媛的小姑娘 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄. ……如果發現寫的有什麼疏漏,請務必告訴我。