如何将 DecimalFormat 的分组分隔符(千位)从 comma/point 更改为使用模式引用?

How to change the grouping separator (thousands) of DecimalFormat from comma/point to quote using patterns?

我有这段代码,我尝试用这种模式替换引号 (') 的千位分隔符 (.):###'###,##

import java.text.*;

  public class NumberFormatTests
  {
    public static void main (String[] args)
    {
      double amount = 100100.543;
      NumberFormat nf = new DecimalFormat("###'###.##");
      System.out.println( "amount with    formatting: " + nf.format(amount) );
    }
  }

但我得到这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: Malformed pattern "###'###.##" at java.text.DecimalFormat.applyPattern(DecimalFormat.java:3411) at java.text.DecimalFormat.(DecimalFormat.java:436) at NumberFormatTests.main(NumberFormatTests.java:8)

我知道可以使用 DecimalFormatSymbols 以编程方式更改它,如下所示:

import java.text.*;
import java.util.Locale;

  public class NumberFormatTests
  {
    public static void main (String[] args)
    {
      double amount = 100100.543;

      Locale currentLocale = new Locale("de", "DE");
      DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale);
      unusualSymbols.setGroupingSeparator('\'');

      NumberFormat nf = new DecimalFormat("###,###.##", unusualSymbols);
      System.out.println( "amount with    formatting: " + nf.format(amount) );
    }
  }

但我需要在模式中找到一种方法,例如“###'###.##”。我已经尝试过“###''###.##”,但引号被添加为后缀。

有什么方法可以替换模式中已有的千位分隔符,而不是以编程方式替换吗?

能否改用 DecimalFormat 的子类? 您可以分析子类中的模式并从模式中提取不寻常的分组分隔符。在调用子类的格式方法时,您可以将此分组分隔符与原始 DecimalFormat 一起使用,如您自己的示例代码中所示。这是子类的format方法返回的结果。