java中double變量保留小數問題


(轉載自玄影池扁舟)

做java項目的時候可能經常會遇到double類型變量保留小數的問題,下面便把我的經驗做個簡短的總結:  

java中double類型變量保留小數問題大體分兩種情況:

(一):小數點后面位數過長,四舍五入保留指定位數:

可以用以下代碼實現:

public class TestDemo {
 public static void main(String[] args) {
     double a=15.32743859;
     double b=Math.round(a*10000)/10000.0000;//保留四位小數
     System.out.println(b); 
 }
}

想保留n位小數,就Math.round(a*10的n次方)/10的n次方.n個0。

(二):如果小數點后末位為0,myeclipse中不予顯示,如

      double a=15.80;
      System.out.print(a);

則在控制台中輸出的結果是15.8。

而我們有時候希望把百分位的0也顯示出來,比如說顯示商品價格,一般是顯示兩位小數,如果商品價格是15.8,也顯示為15.80,如果商品價格是15,也顯示為15.00,這種情況,用(一)中的方法便無法實現了,那應該如何實現呢?

請看下面代碼:

import java.text.DecimalFormat;

public class TestDemo {
 public static void main(String[] args) {
  DecimalFormat df =new DecimalFormat("#####0.00");
     double a=15;
     System.out.println(df.format(a)); 
 }
}

    這樣,即使在我們的double類型變量是15,顯示出來的也是15.00。當然,我們希望顯示多少位就在"#####0.00"的點后面去控制0的個數便可以。如果是"#####0"的話,那我們的double變量無論是15.0或是15.00都能顯示成15,而如果我們的double變量是15.60,則顯示為16,即這種方法也可以實現四舍五入。它包含了(一)的功能,所以我們遇到兩種情況都可以選擇這種方法。

 

     后記:我在做u1項目超市收銀管理系統的時候便遇到了這個問題。在后期的測試完善階段,我發現出現項目中商品價格的地方一般都顯示為一位小數,而實際生活中一般是保留兩位小數。於是乎苦心修改:不斷調整xml中的數值、給double變量賦初值0.00、用Math.round()......等等等等,不勝枚舉,都沒有達到預期的效果,弄得自己丈二和尚摸不着頭腦。老師的“進行特殊處理”的關鍵提示指引着我繼續尋找問題的答案,花了大半天的時間才解決。說起來本周都成了"bug"周了,各種不順,各種調試,真是舉步維艱。然而盡管如此,我還是相信:不要怕錯誤,不要怕問題,要在痛苦解決問題的過程中增加經驗值。柳暗花明也許就在山窮水盡之后。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM