用逗号将整数转换为字符串数千

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

以上是关于用逗号将整数转换为字符串数千的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将包含逗号的抓取字符串转换为整数

C# 将字符串转换为双精度/十进制并返回字符串,保留尾随零,为千位添加逗号

如何将字符串(包含逗号分隔值)转换为整数

golang 将整数转换为字符串表示形式,并使用逗号分隔大小的订单

将整列整数转换为字符串,在 Pandas 中使用逗号分隔千位

在PHP中将字符串[基本上是逗号分隔的数字]转换为整数的最佳方法[重复]