我想把整数35634646转换成千分位形式,也就是35,634,646。
最快的方法是什么?
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
你说希望最快的方式,但也许你指的是“最好的”、“正确的”或“典型的”?
你还要求用逗号表示千位分隔符,但也许你的意思是“根据用户本地惯例以通常人类可读的形式呈现”?
你可以这样做:
int i = 35634646;
String s = NumberFormat.getIntegerInstance().format(i);
美国人将获得"35,634,646"
德国人将获得"35.634.646"
瑞士德语区的人将获得"35'634'646"
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
整数:
int value = 100000;
String.format("%,d", value); // outputs 100,000
双打:
double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31
- 根据psuzzi的反馈进行了编辑。
String.format
。它以 return new Formatter(l) ...
开始等等。因此,垃圾收集器参数并不像它看起来的那样强大。 - Scheintod int value = 35634646;
DecimalFormat myFormatter = new DecimalFormat("#,###");
String output = myFormatter.format(value);
System.out.println(output);
输出:35,634,646
#,###
,如果您想要欧洲风格的格式,则可以使用#,##,###
。 - Ali其他答案是正确的,不过在使用"%,d"
之前,请仔细检查您的区域设置:
Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);
Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);
结果:
35,634,646
35 634 646
使用扩展
import java.text.NumberFormat
val Int.commaString: String
get() = NumberFormat.getInstance().format(this)
val String.commaString: String
get() = NumberFormat.getNumberInstance().format(this.toDouble())
val Long.commaString: String
get() = NumberFormat.getInstance().format(this)
val Double.commaString: String
get() = NumberFormat.getInstance().format(this)
结果
1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456
NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
使用带逗号的 %d
格式说明符:%,d
这是目前最简单的方法。
对于那些无法访问"numberformat"或"String.format"(在框架内使用Java的限制版本)的人,这里有一个解决方案。希望它有用。
number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0) {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1; }
formattedString
import java.text.NumberFormat;
。 - Mike S,
进行分组的美式风格,然而也有一些地区使用句点.
来进行分组。总之,硬编码一个本地化设置被认为是一个不良惯例。 - Hai ZhangLocale.getCurrent()
来解决。 - Roger RV