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

本在載自: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相反

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章