BigDecimal / ArrayList需要新的Locale

时间:2012-09-12 09:16:02

标签: java arraylist locale bigdecimal

我有一个ArrayList,我在其中添加BigDecimals。

我的问题是,BigDecimals以美国方式使用., - 我希望它采用欧洲方式 - 例如而不是14.70我想要14,70

我做了一个方法:

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

当我将整个ArrayList打印到.csv时,我会为每个Bigdecimal调用此方法。但是我想知道我是否可以更改整个ArrayList以了解,我想为我存储元素“正确”的方式?或者也许在我将BigDecimal设置为ArrayList时更改Locale?

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

最好的方法就是你完成它的方式,虽然我会将方法命名为format()而不是getLocale(),因为该方法不会获得Locale,而是格式化BigDecimal。 / p>

数据是BigDecimals的列表。此数据是否以及如何显示/存储在CSV文件中不应改变数据的性质。如果以后需要在英文网页中显示这些数据,则不必更改数据的性质,只需更改此数据的显示方式。

答案 1 :(得分:0)

首先,您不必改变(BigDecimal)元素的存储方式!

您必须更改它们的显示方式。您可以使用DecimalFormat class。

执行此操作

例如:

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);
}

您必须实现一个方法来显示BigDecimal值。例如:

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);
}