前言 :
在很多時候在處理數字時, 應為數字很大所以你希望替換單位改用較小的數字(byte -> kbyte -> mbyte)來顯示. 這時就涉及小數點的問題. 這裡介紹如何在 Java 進行設定顯示小數點第幾位與常見貨幣顯示轉換. 常見方法如下 :
- 使用 BigDecimal :
- double dout=28.965432;
- BigDecimal bd= new BigDecimal(dout);
- bd=bd.setScale(4, BigDecimal.ROUND_HALF_UP);// 小數後面四位, 四捨五入
- System.out.println(bd.doubleValue());
關於Java的數據格式化 :
常見的數字格式轉換可以使用類別 DecimalFormat. 你可以透過其建構子將數字的格式傳入. 常見格式字元如下 :
底下為簡單範例 :
- DecimalFormat df = new DecimalFormat("0.00");
- double douNum = 53423123231.51323;
- String str = df.format(douNum);
保留幾位小數由你的DecimalFormat實例決定,如果想保留三位,則如下定義 :
數據格式化相關類介紹 :
- java.util.* :
- java.text.* :
國際化及 MessageFormat 類 :
MessageFormat運行開發者輸出文本中的變量的格式,它主要用於國際化。它是一個強大的類,就像下面的例子展示的那樣 :
- String message = "Once upon a time ({1,date}, "
- + "around about {1,time,short}), there "
- + "was a humble developer named Geppetto"
- + " who slaved for {0,number ,integer}"
- + " days with {2,number,percent} complete"
- + " user requirements. ";
- Object[] variables = new Object[] { new Integer(4), new Date(),
- new Double(0.21) };
- String output = MessageFormat.format(message, variables);
- System.out.println(output);
如果相同的信息需要被重複輸出但是變量的值不同, 便可以很輕鬆的替換傳入的變數 variables 即可動態變更輸出內容!. 除了可以處理日期、時間、數字和百分數外,MessageFormat 也可以處理貨幣,運行更多的數字格式的控制並且允許指定ChoiceFormat.
使用Currency進行貨幣計算 :
如果您來自美國,您會在較大的數值中間放置逗號來表示千和百萬(等等,每三個數值使用一個逗號).對於浮點數,您將在整數部分和小數部分之間放置小數點。對於金錢,貨幣符號 $ 放在金額的前面。如果您從來沒有到過美國以外的地方,可能就不會關心用英鎊(£)來格式化的英國貨幣,或者用歐元(€)來表示的其他歐洲國家的貨幣.
對於那些我們確實關心的貨幣,我們可以使用 NumberFormat 及其相關的類來格式化它們。開發人員使用 NumberFormat 類來讀取用戶輸入的數值,並格式化將要顯示給用戶看的輸出. NumberFormat 是一個抽像類並提供了一系列getXXXInstance() 方法,用以獲得不同類型的數值類的特定地區版本. 這樣的方法共有五個 :
具體使用哪一個方法取決於您想要顯示的數值類型(或者想要接受的輸入類型).每個方法都提供了兩個版本. 一個版本適用於當前地區,另一個版本接受一個 Locale 作為參數,以便可能地指定一個不同的地區. 透過getCurrencyInstance() 引入, 您能將 Currency 當作 NumberFormat 使用,然而除了它們的數字顯示外,您不能獲得或顯示某個地區的貨幣符號. 有了Currency 類,現在很容易就可以做到這一點.
貨幣代碼來自ISO 4217. 通過傳入某個國家的 Locale 或者貨幣的實際字母代碼,Currency.getInstance() 將返回一個有效的 Currency 對象. NumberFormat 的 getCurrency() 方法將在創建特定地區的貨幣實例之後做同樣的事情. 下面代碼顯示瞭如何獲得貨幣實例,以及如何格式化將要顯示為貨幣的數值. 記住這些轉換僅用於顯示, 如果需要在貨幣之間轉換金額,應該在確定如何顯示值之前進行幣值轉換 :
- StringBuffer buffer = new StringBuffer(100);
- Currency dollars = Currency.getInstance("USD");
- Currency pounds = Currency.getInstance(Locale.UK);
- buffer.append("Dollars: ");
- buffer.append(dollars.getSymbol());
- buffer.append("\n");
- buffer.append("Pound Sterling: ");
- buffer.append(pounds.getSymbol());
- buffer.append("\n-----\n");
- double amount = 5000.25;
- NumberFormat usFormat = NumberFormat.getCurrencyInstance(Locale.US);
- buffer.append("Symbol: ");
- buffer.append(usFormat.getCurrency().getSymbol());
- buffer.append("\n");
- buffer.append(usFormat.format(amount));
- buffer.append("\n");
- NumberFormat germanFormat = NumberFormat
- .getCurrencyInstance(Locale.GERMANY);
- buffer.append("Symbol: ");
- buffer.append(germanFormat.getCurrency().getSymbol());
- buffer.append("\n");
- buffer.append(germanFormat.format(amount));
- JFrame frame = new JFrame("Currency");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JTextArea ta = new JTextArea(buffer.toString());
- JScrollPane pane = new JScrollPane(ta);
- frame.getContentPane().add(pane, BorderLayout.CENTER);
- frame.setSize(200, 200);
- frame.show();
沒有留言:
張貼留言