如何格式化6位或9位数字,如#,##,###

时间:2016-12-15 16:46:50

标签: java

如何格式化6位或9位数字,如#,##,### [for 6]和##,##,##,### [for 9]

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class CheckFormater {

public static void main(String[] args) {
    NumberFormat nf6 = new DecimalFormat("#,##,###");
    System.out.println(nf6.format(123456d));

    NumberFormat nf9 = new DecimalFormat("##,##,##,###");
    System.out.println(nf9.format(123456789d));
}

}

我的输出如下

123,456
123,456,789

我期待如下

1,23,456
12,34,56,789

如何进行服装格式化?

2 个答案:

答案 0 :(得分:1)

您可以使用ICU4J

import com.ibm.icu.text.DecimalFormat;
import com.ibm.icu.text.DecimalFormatSymbols;

public class NewClass {
    public static void main(String[] args)  { 
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setGroupingSeparator(',');
        DecimalFormat nf6  = new DecimalFormat("#,##,###", dfs);
        DecimalFormat nf9  = new DecimalFormat("##,##,##,###", dfs);
        System.out.println(nf6.format(123456d));
        System.out.println(nf9.format(123456789d));
    }   
}

//prints
//1,23,456
//12,34,56,789

答案 1 :(得分:0)

以下是Java Docs的说法:

  

分组分隔符通常用于数千个,但在某些国家/地区,它可以分离数万个。分组大小是分组字符之间的固定位数,例如3表示100,000,000或4表示1,0000,0000。如果提供具有多个分组字符的模式,则最后一个和整数结尾之间的间隔是使用的间隔。所以“#,##,###,####”==“######,####”==“##,####,####”。

换句话说,您一次只能指定一个分组分隔符格式。千位分隔符或一万个分隔符或百个分隔符。即使您尝试在一个中指定多种格式,该方法也只使用最后一个和整数结束之间的间隔。因此,在您的情况下,您指定“#,##,###”,但该方法将仅考虑最后一个逗号和之后的数字,在您的情况下为3。这就是为什么输出是一千个分隔符。

我也希望选择合适的语言环境应解决此数字格式问题,而无需指定任何模式。例如。在印度,这些数字实际上是按照你想要的方式格式化的。第一个分隔符是千位数,休息符是百位数。因此,如果我选择印度英语语言环境,它应该自动满足此要求。但事实并非如此。

NumberFormat nf6 = NumberFormat.getInstance(new Locale("en-IN"));       
System.out.println(nf6.format(54123756.523d));//Still prints 54,123,756.523 and not 5,41,23,756.523

所以很遗憾没有现成的方法来实现你的目标,除非你在另一个答案中寻求使用第三方库的建议。但是你可以随时使用。它并不整洁,但实现了目标。也许你可以用实用方法或其他东西封装这个hack:

    double number = 54123756.523d;
    int prefix = (int)number / 1000;

    NumberFormat nf1 = new DecimalFormat("#,##");
    String newPrefix = nf1.format(prefix);

    double remainder = number - (prefix * 1000);
    NumberFormat nf2 = new DecimalFormat("#,###.##");
    String newRemainder = nf2.format(remainder);

    String finalNum = newPrefix + "," + newRemainder;
    System.out.println("Formatted number is " + finalNum);

那么看看你是否可以使用上面建议的代码示例。它不是理想或有效的,但至少可以满足您的目的,不需要任何第三方库。