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

时间:2018-10-24 19:10:08

标签: java number-formatting decimalformat

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

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) );
    }
  }

但我收到此错误:

  

线程“主”中的异常java.lang.IllegalArgumentException:   格式错误的格式“ ###'###。##”   java.text.DecimalFormat.applyPattern(DecimalFormat.java:3411)在   java.text.DecimalFormat。(DecimalFormat.java:436)在   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) );
    }
  }

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

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

1 个答案:

答案 0 :(得分:0)

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