如何格式化字符串编号以在android编辑字段中包含逗号

use*_*964 63 java string format android

我可以在android中使用什么功能将数字显示为不同的格式.

例如:如果我输入1000,那么它应该显示为1,000.如果我输入10000,那么它应该显示为10,000.如果我输入1000000,那么它应该显示为1,000,000.

请指导我.

Nei*_*eil 145

你可以使用DecimalFormat并只是格式化数字

DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);
Run Code Online (Sandbox Code Playgroud)

结果将是

  • 1,000,000 为1000000
  • 10,000 为10000
  • 1,000 为1000

更新12/02/2019

String.format("%,d", number)将是一个更好的(不太硬编码)的解决方案,如下面的评论所示@DreaminginCode所以我想我会在这里添加它作为替代

  • 你为什么想这么做?100,000是标准的.尝试以#,##,###这样的哈希格式移动逗号.不知道它是否会起作用,但你可以尝试一下. (5认同)
  • @Neil,该标准仅对特定国家/地区有效。例如,印度有不同的标准,格式为#,##,### (4认同)
  • 它回答了这个问题,但回答一个问题不会自动成为一个好答案.当信息不足时,我相信作为程序员的人应该少花钱而不是更多.当假设发生变化时,使用硬编码的答案很容易破解,在这种情况下,硬编码对于任何i18n相关代码都是特别糟糕的,因为总有未来的人会尝试添加i18n,这将是他们的wtf时刻.更不用说即使只是一个更大的数字可以打破这个.对于一个更简单的解决方案,你可以使用`String.format("%,d",number)`这是简短而正确的 (4认同)

San*_*eep 39

尝试这个希望它会有所帮助.

 System.out.println(NumberFormat.getNumberInstance(Locale.US).format(1000));
Run Code Online (Sandbox Code Playgroud)

  • Locale.getDefault()是获取设备区域设置的更简单方法. (5认同)
  • 为了安全起见,您可能希望使用设备的区域设置,而不是美国.Locale current = getResources().getConfiguration().locale; (4认同)
  • 根据[Java文档](https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html),无参数`get ... Instance()`方法默认情况下使用默认语言环境。 (3认同)

YLS*_*YLS 11

private String getFormatedAmount(int amount){
  return NumberFormat.getNumberInstance(Locale.US).format(amount);
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*sed 5

int[] numbersToFormat = new int[]
  { 1, 10, 100, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };


for (int number : numbersToFormat) {
  System.out.println(  
    NumberFormat.getNumberInstance(Locale.getDefault()).format(number));
}
Run Code Online (Sandbox Code Playgroud)

输出值

1
10
100
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
Run Code Online (Sandbox Code Playgroud)