本在載自:http://blog.csdn.net/chaozhidan/article/details/8161862
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相反 |