我有一个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?
这样做的最佳方式是什么?
答案 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);
}