给定一个locale java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
如何在该数字格式中将用作十进制分隔符的字符(如果它是逗号或点)?如何在不使用新的DecimalFormat(格式)的情况下修改此属性?
由于
答案 0 :(得分:75)
你正在寻找助手班DecimalFomatSymbols:
DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();
根据需要设置符号:
//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);
编辑:此答案仅对DecimalFormat
有效,而不是问题中要求的NumberFormat
。无论如何,因为它可以帮助作者,我会在这里让它。
答案 1 :(得分:5)
我同意 biziclop 和 Joachim Sauer 那些弄乱十进制和分组分隔符并手动完成这项工作会导致很多问题。在NumberFormat
getInstance方法中使用locale参数会自动为您完成所有工作。如果您愿意,可以轻松禁用千位分组分隔符。
以下junit测试方法(通过)显示基于英语和德语语言环境的此行为。
public void testFormatter() {
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
//and in case you want another decimal seperator for a specific locale
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
formatter.setDecimalFormatSymbols(decimalFormatSymbols);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
}
答案 2 :(得分:2)