如何格式化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
如何进行服装格式化?
答案 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);
那么看看你是否可以使用上面建议的代码示例。它不是理想或有效的,但至少可以满足您的目的,不需要任何第三方库。