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

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.