2016-12-15 68 views
0

如何格式化6或9位數字,如#,##,### [用於6]和##,##,## ,### [9]如何格式化6或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 

如何做服裝的格式?

+3

從https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html分組分隔符通常用於數千個分組,但在某些國家它將分隔數以萬計。分組大小是分組字符之間的恆定數字位數。 **如果你提供一個帶有多個分組字符的模式,那麼最後一個和整數的結尾之間的間隔就是使用的那個間隔。**你必須製作一個String格式程序。 – Compass

+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 
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 

所以,遺憾的是沒有現成的辦法,除非你去爲對方的回答使用第三方庫的建議,以達到你的目標。但是你總是可以使用一個heck。它並不整齊,但實現了目標。也許你可以在一個實用的方法什麼的封裝這個技巧:

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

所以,看看你能不能用上面的代碼示例建議住。這不是理想的或有效的,但至少可以達到您的目的,並且不需要任何第三方庫。