2

我有一个 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 时,我为每个 Bigdecimals 调用此方法。但是我想知道是否可以更改整个 ArrayList 以了解我想以“正确”的方式存储元素?或者当我将 BigDecimal 设置为 ArrayList 时可能会更改语言环境?

做这个的最好方式是什么?

4

2 回答 2

2

最好的方法是你完成它的方式,虽然我会命名该方法format()而不是getLocale(),因为该方法没有获取语言环境,而是格式化 BigDecimal。

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

于 2012-09-12T09:21:30.193 回答
0

首先,您无需更改 (BigDecimal) 元素的存储方式!

您必须更改它们的显示方式。您可以使用DecimalFormat类来做到这一点。

例如:

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);
}
于 2012-09-12T09:28:24.433 回答