(轉載自玄影池扁舟)
做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"周了,各種不順,各種調試,真是舉步維艱。然而盡管如此,我還是相信:不要怕錯誤,不要怕問題,要在痛苦解決問題的過程中增加經驗值。柳暗花明也許就在山窮水盡之后。