2017-04-25 72 views
0

我想使用DecimalFormat以给定的格式字符串格式化数字。这在oracle java docs中有记录。DecimalFormat忽略给定的模式,但使用语言环境

public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 
    DecimalFormat myFormatter = new DecimalFormat(pattern); 
    String output = myFormatter.format(value); 
    System.out.println(value + " " + pattern + " " + output); 
    } 

    static public void main(String[] args) { 
    customFormat("###,###.###", 123456.789); 
    } 
} 

但我的输出是对我的德国德国OS格式式样:

actual: 123456.789 ###,###.### 123.456,789 
expected: 123456.789 ###,###.### 123,456.789 

我知道我能explicitly set the separators。 但我希望能够像Oracle文档中的字符串一样设置格式。这应该独立于我的OS语言环境。

回答

2

由于您的默认语言环境是德语,因此您会获得德文数字格式。如果您希望更改该选项,请为DecimalFormat的数字格式选择不同的区域设置。

实施例:

import java.text.DecimalFormat; 
import java.text.NumberFormat; 
import java.util.Locale; 
public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 

    NumberFormat nf1 = NumberFormat.getNumberInstance(Locale.ENGLISH); 
    DecimalFormat df1 = (DecimalFormat)nf1; 
    df1.applyPattern(pattern); 
    String output = df1.format(value); 
    System.out.println("Input: " + value + ", pattern: " + pattern + " output: " + output); 


    NumberFormat nf2 = NumberFormat.getNumberInstance(Locale.GERMAN); 
    DecimalFormat df2 = (DecimalFormat)nf2; 
    df2.applyPattern(pattern); 
    output = df2.format(value); 
    System.out.println("Input: " + value + ", pattern: " + pattern + " output: " + output); 

    } 

    static public void main(String[] args) { 
    customFormat("###,###.###", 123456.789); 
    } 
} 

输出:

Input: 123456.789, pattern: ###,###.### output: 123,456.789 
Input: 123456.789, pattern: ###,###.### output: 123.456,789 
相关问题