Java 保留兩位小數(BigDecimal和DecimalFormat用法)
阿新 • • 發佈:2019-01-25
萌新今晚用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是將這個數從根本上改變。