用逗号将整数转换为字符串数千
Posted
技术标签:
【中文标题】用逗号将整数转换为字符串数千【英文标题】:Converting Integer to String with comma for thousands 【发布时间】:2011-10-27 13:34:34 【问题描述】:我想将整数 35634646 转换成千位“,”,所以应该是 35,634,646。
最快的方法是什么?
【问题讨论】:
【参考方案1】:这也是一种可以用任何字符替换默认分隔符的方法:
val myNumber = NumberFormat.getNumberInstance(Locale.US)
.format(123456789)
.replace(",", "،")
【讨论】:
【参考方案2】:使用扩展
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
【讨论】:
【参考方案3】: int value = 35634646;
DecimalFormat myFormatter = new DecimalFormat("#,###");
String output = myFormatter.format(value);
System.out.println(output);
输出:35,634,646
【讨论】:
您的模式不必超过#,###
,如果您想要欧式格式,那么您可以使用#,##,###
。
@Ali:你描述的格式只在印度使用,我至少有 90% 的把握印度不在欧洲。
我明白了...很好,如果您需要印度格式,那么您就是这样做的。
这取决于语言环境,如果在默认语言环境不使用,
分隔数千的情况下运行,则不会产生正确的(根据问题)输出。【参考方案4】:
对于那些无法访问“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
【讨论】:
考虑到edit 你的答案,在你的代码中添加一些 cmets(也许将它包装在一个方法中,这样它会更有用)【参考方案5】:整数:
int value = 100000;
String.format("%,d", value); // outputs 100,000
双打:
double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31
String.format is pretty powerful.
- 根据psuzzi 反馈编辑。
【讨论】:
优点:没有“新”,不会加载垃圾收集器(与 DecimalFormat 不同)。 看看String.format
。它以return new Formatter(l) ...
等开头。所以垃圾收集器的论点并不像看起来那么强大。
这是我最喜欢的答案,问题要求使用 Integer,所以这里是代码: int value = 100000; String.format("%,d", value);
我喜欢这个。【参考方案6】:
使用带逗号的%d
格式说明符:%,d
这是迄今为止最简单的方法。
【讨论】:
【参考方案7】:这个解决方案对我有用:
NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
【讨论】:
【参考方案8】:您要求最快,但也许您的意思是“最佳”或“正确”或“典型”?
您还要求用逗号表示千位,但也许您的意思是“根据您的用户的当地习惯以正常人类可读的形式”?
你这样做:
int i = 35634646;
String s = NumberFormat.getIntegerInstance().format(i);
美国人将获得“35,634,646”
德国人将获得“35.634.646”
瑞士德国人将获得“35'634'646”
【讨论】:
在哪里可以获得每个语言环境的数字模式?我试图阅读代码,但无法在任何地方找到它【参考方案9】:如果必须在 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>
【讨论】:
【参考方案10】:你不能用一个
System.out.printf("%n%,d",int name);
printf
中的逗号应将逗号添加到%d
中间。
对此并不积极,但对我有用。
【讨论】:
这不是为我编译的 “对此不乐观。”毫无意义。【参考方案11】:首先你需要包含 JSTL 标签:-
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
在页面的开头
【讨论】:
【参考方案12】:其他答案是正确的,但是在使用 "%,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
【讨论】:
【参考方案13】:System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
【讨论】:
我必须添加import java.text.NumberFormat;
。
这会强制使用美国风格的分组,它总是使用,
,但是也有一些地区使用.
来代替分组。总之,硬编码语言环境被认为是一种不好的做法。
@DreaminginCode 做好Locale.getCurrent()
是解决方案
@RogerRV 没有 Locale.getCurrent() (至少在 android 上)
是的,这对于 96% 不住在美国的人来说并不是最好的答案【参考方案14】:
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
【讨论】:
注意:这实现了特定于语言环境的分组。 docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#dnum 我更喜欢这种不那么冗长的方法而不是使用 NumberFormat以上是关于用逗号将整数转换为字符串数千的主要内容,如果未能解决你的问题,请参考以下文章
C# 将字符串转换为双精度/十进制并返回字符串,保留尾随零,为千位添加逗号
golang 将整数转换为字符串表示形式,并使用逗号分隔大小的订单