如何格式化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如何进行服装格式化?
发布于 2016-12-16 01:08:55
您可以使用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发布于 2016-12-16 02:07:19
以下是Java Docs所说的:
分组分隔符通常用于数千人,但在某些国家,它用于分隔10000人。分组大小是分组字符之间的恒定位数,例如3表示100,000,000或4表示1,000,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);因此,看看您是否可以接受上面建议的代码示例。它并不理想,效率也不高,但至少可以满足您的需求,并且不需要任何第三方库。
https://stackoverflow.com/questions/41169288
复制相似问题