数字格式中的小数分隔符

2022-08-31 20:56:21

给定一个 locale java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();

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

谢谢


答案 1

帮助器类 DecimalFomatSymbols 就是您要查找的内容:

DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();

要根据需要设置符号:

//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);

编辑:此答案仅对 有效,而对问题中要求的无效。无论如何,因为它可能对作者有所帮助,所以我会把它放在这里。DecimalFormatNumberFormat


答案 2

我同意 biziclopJoachim Sauer 的观点,即弄乱十进制和分组分隔符并手动完成这项工作可能会导致很多问题。在 getInstance 方法中使用 locale 参数会自动为您完成所有工作。如果您愿意,您可以轻松禁用千位分组分隔符。NumberFormat

以下 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
}