2012-04-22 1 views
56

에 0을 제거하는 최대 2 진수와 문자열 등을 BigDecimal :형식 나는 BigDecimal의 번호를 가지고 있고 그것의 2 소수점 그래서 내가 사용하여 절단만을 고려 소수 부분

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

지금 내가 원하는 예를 들어, 문자열로 인쇄하지만이 0 인 경우 소수 부분을 제거 :

1.00 -> 1

1.50 -> 1.5

1.99 -> 1.99

Formatter, formatter.format를 사용해 보았지만 항상 소수점 2 자리를 얻습니다.

어떻게하면됩니까? 어쩌면 bd.toPlainString()에서 문자열 작업을하고 있을까요?

답변

71

문자열 형식을 지정하는 대신 BigDecimal의 서식을 지정하기 위해 DecimalFormat을 사용했지만 문제가없는 것으로 보입니다.

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

. 소수점 뒤에 후행 0과 동일한 요구 사항이 있지만 ** 00 ** ** 출력이 잘리지 않습니다. –

+1

@ParameshKorrakuti 'df.setMinimumFractionDigits (2)'는 setScale 및 setGrouping 및 setMaxFrac 없이는 정상적으로 작동합니다. –

+3

10 진수 형식은 변함없는 NumberFormat입니다. –

6

stripTrailingZeros()을 사용하십시오.

This 도움말이 도움이됩니다.

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

원하는 경우'new DecimalFormat ("0.00")'을 사용합니다. (예 : "DecimalFormat()"을 사용합니다. 두 자릿수가 항상 표시되도록하려면 '1000.5'는'1000.50'로 표시됩니다. –

+1

@ ChrisParton의 솔루션은 완벽하게 작동합니다. 또한 일부가 현지화를 적용해야하는 경우 아래 논리를 사용할 수 있습니다. 'import java.math.BigDecimal; 가져 오기 java.text. *; 공용 클래스 LocalizeExample { public static void main (String [] args) { BigDecimal bd = new BigDecimal ("123.10"); DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance (Locale.GERMAN); decimalFormat.applyPattern ("# 0.00"); 문자열 결과 = decimalFormat.format (bd); System.out.println (result); } }' –

6

아래의 코드가 도움이 될 수 있습니다 :

코드는 다음과 같은 것입니다.

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

만약 그 돈을 사용 :

이 프로그램에 대한 예상 출력 무엇
NumberFormat.getNumberInstance(java.util.Locale.US).format(bd) 
관련 문제