2012-09-12 2 views
2

BigDecimal을 추가하는 ArrayList가 있습니다.BigDecimal/ArrayList에 새 로케일이 필요합니다.

내 문제는 BigDecimals가 미국식으로 .,을 사용한다는 것입니다. 유럽식으로 원합니다. 14.70 대신 14,70을 원합니다.

나는 방법을 만들어 : 나는이 BigDecimal를 각각에 대해이 메서드를 호출을 .csv로 전체 ArrayList를 인쇄 식에서

public static String getLocale(BigDecimal n) { 
    String newValue  = null; 
    if (n != null) 
     newValue = NumberFormat.getInstance().format(n); 
    return newValue; 
} 

. 그러나 내가 전체 ArrayList를 변경할 수 있는지 궁금 해서요, 그 요소를 "정확한"방법으로 저장하고 싶습니다. 또는 BigDecimal을 ArrayList로 설정할 때 Locale을 변경 하시겠습니까?

가장 좋은 방법은 무엇입니까?

답변

2

메서드는 getLocale() 대신 format() 대신 Locale을 가져 오지만 BigDecimal 형식을 지정하기 때문에 가장 좋은 방법은 수행 한 방식입니다.

데이터는 BigDecimal 목록입니다. 이 데이터가 CSV 파일에 표시/저장되는지 여부는 데이터의 특성을 변경해서는 안됩니다. 나중에 이러한 데이터를 영어로 웹 페이지에 표시해야하는 경우 데이터의 특성을 변경할 필요가 없으며이 데이터가 표시되는 방식 만 변경하면됩니다.

+0

감사합니다. 나는 그것을하기의 오래된 방법을 지켰다 - 비록 내가 방법 방법을 너무 많은 시간이라고 생각한다고해도 ... :) – Jobu

0

첫째, (BigDecimal) 요소가 저장되는 방식을 변경하지 않아야합니다!

표시 방법을 변경해야합니다. DecimalFormat 클래스로이 작업을 수행 할 수 있습니다. 예를 들어

: 당신이 너무 BigDecimal의 값을 표시하는 방법을 구현해야보다

private static final String BIG_DECIMAL_DEFAULT_FORMAT = "##0.00"; 
private static final char GROUPING_SEPARATOR = '.'; 
private static final char DECIMAL_SEPARATOR = ','; 
private static final int DIGIT_GROUP_NUMBER = 3; 
private static final DecimalFormat decimalFormatter = new DecimalFormat(BIG_DECIMAL_DEFAULT_FORMAT); 

static{ 
    decimalFormatter.setParseBigDecimal(true); 
    decimalFormatter.setGroupingSize(DIGIT_GROUP_NUMBER); 
    paschiFaceSymbols.setDecimalSeparator(DECIMAL_SEPARATOR); 
    paschiFaceSymbols.setGroupingSeparator(GROUPING_SEPARATOR); 
} 

. 예 :

public static String format(BigDecimal value, String pattern) 
{ 
    if (value == null){ 
     throw new IllegalArgumentException("Error:value=null"); 
    } 

    if (pattern != null && !pattern.isEmpty()){ 
     decimalFormatter.applyPattern(pattern); 
    } 
    else{ 
     decimalFormatter.applyPattern(BIG_DECIMAL_DEFAULT_FORMAT); 
    } 

    return decimalFormatter.format(value); 
} 
관련 문제