NumberFormat中的小数分隔符

Jav*_*avi 42 java locale number-formatting

给定一个locale java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Tom*_*ros 77

你正在寻找助手类DecimalFomatSymbols:

DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();
Run Code Online (Sandbox Code Playgroud)

根据需要设置符号:

//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);
Run Code Online (Sandbox Code Playgroud)

编辑:此答案仅对问题有效DecimalFormat,而不是NumberFormat问题所要求的.无论如何,因为它可以帮助作者,我会在这里.

  • 对于记录,此行_DecimalFormat format = DecimalFormat.getInstance(); _不会编译,因为getInstance()方法返回NumberFormat对象. (23认同)
  • 或者完全删除依赖:`new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT)).getDecimalSeparator()` (3认同)
  • 甚至更安全;`new DecimalFormat()。getDecimalFormatSymbols()。getDecimalSeparator()` (2认同)

Mar*_*dou 5

我同意biziclopJoachim Sauer那样弄乱小数和分组分隔符并手动完成这项工作会导致很多问题.在NumberFormatgetInstance方法中使用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
}
Run Code Online (Sandbox Code Playgroud)