NumberFormat中的小数分隔符

时间:2011-01-17 12:32:19

标签: java locale number-formatting

给定一个locale java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();

如何在该数字格式中将用作十进制分隔符的字符(如果它是逗号或点)?如何在不使用新的DecimalFormat(格式)的情况下修改此属性?

由于

3 个答案:

答案 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)

如果您的NumberFormat个实例是DecimalFormat,那么您可以使用getDecimalFormatSymbols()获取该信息。

一般情况下,您无法获取该信息。

为什么需要它?