用逗号将整数转换为字符串,成千上万


181

我想将一个整数35634646转换为千位“,”,所以它应该是35634646。

最快的方法是什么?

Answers:


290
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
我必须补充import java.text.NumberFormat;
Mike S

6
这会强制始终使用的美式风格分组,,但是也有一些区域.用于分组。简而言之,对区域设置进行硬编码被认为是不好的做法。
张海

4
@DreaminginCode要做的Locale.getCurrent()就是解决方案
Roger RV

@RogerRV没有Locale.getCurrent()(至少在android上如此)
E.Akio

是的,这对于96%不在美国的人来说不是最好的答案

152

您要求最快,但您的意思是“最佳”,“正确”或“典型”?

您还要求用逗号表示数千个,但您的意思是“根据用户的本地习惯以普通的人类可读格式”吗?

您可以这样做:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

美国人将获得“ 35,634,646”

德国人将获得“ 35.634.646”

瑞士德国人将获得“ 35'634'646”


在哪里可以获得每个语言环境的数字模式?我试图阅读该代码,但在任何地方都找不到
nhoxbypass '18


41

整数:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

双打:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

String.format非常强大。

-根据psuzzi反馈进行了编辑。


1
优点:没有“新”,不会加载垃圾收集器(与DecimalFormat不同)。
Contango

看看吧String.format。它以return new Formatter(l) ...etc 开头。因此,垃圾收集器参数似乎并不那么强大。
Scheintod

2
这是我最喜欢的答案,该问题要求使用Integer,因此代码如下:int value = 100000; String.format(“%,d”,value);
psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

输出: 35,634,646


1
您的图案不必超过#,###,如果您想要欧式风格的格式,则可以使用#,##,###
阿里

7
@Ali:您描述的格式仅在印度使用,而且我至少90%确信印度不在欧洲。
Cairnarvon

我明白了...好吧,如果您需要印度格式,那么您就是这样做的。
阿里

1
这是依赖于语言环境的,如果在默认语言环境不使用分隔千位的情况下运行,将不会产生正确的输出(根据问题),
antak '16

17

其他答案是正确的,但是在使用之前,请仔细检查您的语言环境"%,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

3

此解决方案为我工作:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));


1

如果必须在JSP中执行相同的操作,请使用:

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

当然可以使用多个值:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>

1

对于无法访问“ 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

考虑编辑答案,在代码中添加一些注释(并可能将其包装在方法中,这样可能会更有用)
noiaverbale

0

使用扩展

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

-1

你不能使用

System.out.printf("%n%,d",int name);

中的逗号printf应将逗号添加到%d中间。

对此不乐观,但对我有用。


这对我来说不是编译的
Mishax

“对此不乐观。” 无意义。
罗伯·谢泼德

-8

首先,您需要包括JSTL标签:-

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

在页面的开始

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.