如何将 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方法返回的结果。
我有这段代码,我尝试用这种模式替换引号 (') 的千位分隔符 (.):###'###,##
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方法返回的结果。