2011-12-21 22 views
11

đầu vào trông giống như 8.7000000 và tôi muốn định dạng nó thành dạng như vậy 8.70 EUR. tôi coi việc sử dụng lớp DecimalFormat:Làm thế nào để sử dụng DecimalFormat để định dạng tiền?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 

Kết quả là 8,7 EUR. Làm cách nào tôi có thể yêu cầu trình định dạng có hai chữ số sau ,?

+3

Nói chung, bạn không nên sử dụng các loại dấu chấm động nhị phân để lưu trữ giá trị tiền tệ anyway. Sử dụng BigDecimal hoặc chỉ cần mở rộng một số nguyên (ví dụ: có số nguyên xu). –

Trả lời

23

Cũng muốn làm nổi bật ở đây điểm của Jon Skeet về việc sử dụng số nguyên để lưu trữ tất cả đơn vị tiền tệ của bạn - không muốn xử lý các lỗi dấu phẩy động bằng tiền.

sử dụng .00 thay vì ## -. 0 có nghĩa là một chữ số, # có nghĩa là một chữ số (Nhưng ẩn nó nếu nó bằng không)

Double number = Double.valueOf(text); 

DecimalFormat dec = new DecimalFormat("#.00 EUR"); 
String credits = dec.format(number); 

TextView tt = (TextView) findViewById(R.id.creditsView); 
tt.setText(credits); 

hoặc

sử dụng setMinimumFractionDigits?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    dec.setMinimumFractionDigits(2); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 
+0

hoàn hảo, cảm ơn bạn! –

+0

Định dạng sẽ trông như thế nào nếu tôi có 0.0600 làm đầu vào và muốn 6.0 ct làm đầu ra? –

+0

Bạn sẽ phải làm điều đó trong mã tôi sợ - định dạng thập phân sẽ không đối phó với việc thay đổi đơn vị. Tôi đoán có một điều kiện 'if (val < 1 && val > 0) {// nhân với 100 và sử dụng định dạng ct} else {// use eur formatter} –

4

Tôi tìm thấy một giải pháp tốt đẹp trong liên kết này dưới đây

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

trong ngắn hạn để đại diện cho một đồng tiền như 92323345465,30 như 92,323,345,465.30 chỉ cần sử dụng ###, ###, ###, # ##. 00

Tức là, bất cứ khi nào bạn sử dụng '0', thì '0' sẽ được thay thế bằng một chữ số khác, hoặc nếu không có chữ số để thay thế, thì nó sẽ S APPN S!! Nhưng bạn sử dụng '#' sau đó nếu không có số để thay thế '#', thì không gian đó sẽ trống.

Hãy nhớ rằng bạn thậm chí có thể thêm lên những biểu tượng của riêng bạn như $, vv ở phía trước của định dạng hoặc thậm chí sau chuỗi định dạng

2

Tôi nghĩ rằng một lựa chọn tốt sẽ aproach này:

Sử dụng #,###.00 sự kết quả cho giá trị 0.50 sẽ được hiển thị như thế này:

$, 50

Tuy nhiên, nếu bạn sử dụng #,##0.00 kết quả cho cùng giá trị sẽ là:

$ 0,50