1. 程式人生 > >java中double類型顯示兩個小數,比如12.00

java中double類型顯示兩個小數,比如12.00

概念 format pan doc 而不是 興趣 compareto 就會 decimal

Double類型的數據如何保留兩位小數? 各位大蝦,現有Double類型的數據,如何轉換為保留兩位小數的數,返回值的類型仍然是Double類型的,而不是字符串類型。 比如 0,返回“0.00”;
提示:DecimalFormat df = new DecimalFormat( "#####0.00 "); System.out.println(df.format(d)); 這段代碼能夠將Double類型的數據設置指保留兩位,但是返回的是String類型,要讓返回Double類型的,怎麽辦?
------解決方案--------------------------------------------------------
首先你要搞明白,什麽是模型,什麽是展現。
既然“客戶的需求是希望能將0.0也顯示為 0.00”,那麽客戶並沒有要求說“希望0在內部保存的時候也保存為0.00”,他要的只是展現。所以,不論你存成什麽樣,只要你能展現的時候轉成他要的格式不就行了。
如果你希望把一個0存儲成0.00的形式,那我只好告訴你,只有string和bigdecimal可以選擇,絕對不可能單純用double實現。
對double來說,0和0.00永遠是一樣的。如果你要問為什麽,我可以告訴你,這樣表示出來的數你才會覺得比較合乎你從小接受的數的概念,否則就會有點亂套。
如果你有興趣,可以仔細先看bigdecimal的javadoc,由於bigdecimal能分別表示0和0.0以及0.00等等,造成一個很怪的現象,就是,在bigdecimal的表示下:0.equals(0.0) 以及 0.equals(0.00) 都會返回假;同時,0.compareTo(0.0) 以及 0.compareTo(0.00) 卻都會返回0。 BigDecimal rateDecimal = new BigDecimal(12);//12是一個double類型

BigDecimal num=rateDecimal.setScale(1, BigDecimal.ROUND_HALF_UP);

num是12.00;用BigDecimal來幫助顯示後面的零

ROUND_CEILING 大於等於該數的那個最近值
ROUND_DOWN 正數是小於等於該數的那個最近數,負數是大於等於該數的那個最近數
ROUND_FLOOR 小於等於該數的那個值
ROUND_HALF_DOWN 五舍六入
ROUND_HALF_EVEN 向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,如果保留位數是奇數,使用ROUND_HALF_UP ,如果是偶數,使用ROUND_HALF_DOWN
ROUND_HALF_UP 四舍五入
ROUND_UNNECESSARY 計算結果是精確的,不需要舍入模式
ROUND_UP 和ROUND_DOWN相反

java中double類型顯示兩個小數,比如12.00