這裏是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);
所以,看看你能不能用上面的代碼示例建議住。這不是理想的或有效的,但至少可以達到您的目的,並且不需要任何第三方庫。
來源
2016-12-15 18:07:18
VHS
從https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html分組分隔符通常用於數千個分組,但在某些國家它將分隔數以萬計。分組大小是分組字符之間的恆定數字位數。 **如果你提供一個帶有多個分組字符的模式,那麼最後一個和整數的結尾之間的間隔就是使用的那個間隔。**你必須製作一個String格式程序。 – Compass
字符串格式化程序的任何示例? –