2012-04-22 44 views
56

Tôi có một số BigDecimal và tôi chỉ xem xét 2 chữ số thập phân của nó vì vậy tôi cắt nó bằng cách sử:Format một BigDecimal như String với tối đa 2 chữ số thập phân, loại bỏ 0 trên phần thập phân

bd = bd.setScale(2, BigDecimal.ROUND_DOWN) 

Bây giờ tôi muốn in nó như string nhưng loại bỏ phần thập phân nếu nó là 0, ví dụ:

1.00 -> 1

1.50 -> 1.5

1,99 -> 1,99

Tôi đã thử sử dụng Formatter, formatter.format nhưng tôi luôn nhận được 2 chữ số thập phân.

Tôi làm cách nào để thực hiện việc này? Có thể làm việc trên chuỗi từ bd.toPlainString()?

Trả lời

71

Tôi đã sử dụng DecimalFormat để định dạng BigDecimal thay vì định dạng chuỗi, dường như không có vấn đề gì với nó.

Mã này là một cái gì đó như thế này:

bd = bd.setScale(2, BigDecimal.ROUND_DOWN); 

DecimalFormat df = new DecimalFormat(); 

df.setMaximumFractionDigits(2); 

df.setMinimumFractionDigits(0); 

df.setGroupingUsed(false); 

String result = df.format(bd); 
+0

sản lượng dự kiến ​​cho chương trình này là gì. Tôi nhận được các yêu cầu tương tự đối với số không theo sau dấu thập phân sau dấu thập phân số không như **. 00 ** cắt ngắn trong đầu ra. –

+1

@ParameshKorrakuti 'df.setMinimumFractionDigits (2)' hoạt động tốt mà không có setScale và setGrouping và setMaxFrac. –

+3

Định dạng thập phân là NumberFormat trong ngụy trang. Sử dụng 'NumberFormat numberFormat = NumberFormat.getPercentInstance();' rồi 'numberFormat.setMinimumFractionDigits (2);' sau đó 'String percent = numberFormat.format (yourBigDecimal);' –

6

Sử dụng stripTrailingZeros().

This bài viết sẽ giúp bạn.

45
new DecimalFormat("#0.##").format(bd) 
+28

Tôi sử dụng 'new DecimalFormat (" 0.00 ")' nếu tôi muốn để đảm bảo rằng hai chữ số thập phân luôn được hiển thị, ví dụ '1000.5' sẽ hiển thị là '1000.50'. Giải pháp –

+1

@ ChrisParton hoạt động hoàn hảo, ngoài ra nếu một số yêu cầu áp dụng bản địa hóa, chúng tôi có thể sử dụng logic dưới đây. 'nhập java.math.BigDecimal; nhập java.text. *; lớp công khai LocalizeExample { chính void tĩnh chính (String [] args) { BigDecimal bd = new BigDecimal ("123.10"); DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance (Locale.GERMAN); decimalFormat.applyPattern ("# 0.00"); Kết quả chuỗi = decimalFormat.format (bd); System.out.println (kết quả); } } ' –

6

Mã dưới đây có thể giúp bạn.

protected String getLocalizedBigDecimalValue(BigDecimal input, Locale locale) { 
    final NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); 
    numberFormat.setGroupingUsed(true); 
    numberFormat.setMaximumFractionDigits(2); 
    numberFormat.setMinimumFractionDigits(2); 
    return numberFormat.format(input); 
} 
2

Nếu sử dụng tiền của mình:

NumberFormat.getNumberInstance(java.util.Locale.US).format(bd) 
Các vấn đề liên quan