81

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

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

请指导我。

4

9 回答 9

174

您可以使用DecimalFormat并格式化数字

DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);

结果将是

  • 1,000,000为 1000000
  • 10,00010000
  • 1,0001000

2019 年 12 月 2 日更新

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

于 2013-11-05T11:56:25.963 回答
48

试试这个希望它会有所帮助。

 System.out.println(NumberFormat.getNumberInstance(Locale.US).format(1000));
于 2013-11-05T11:48:58.587 回答
15
private String getFormatedAmount(int amount){
  return NumberFormat.getNumberInstance(Locale.US).format(amount);
}
于 2016-10-28T11:28:06.713 回答
9
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));
}

输出

1
10
100
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
于 2017-07-15T15:57:09.917 回答
4

在普通类中添加这个函数

  public static String getFormatedNumber(String number){
        if(!number.isEmpty()) {
            double val = Double.parseDouble(number);
            return NumberFormat.getNumberInstance(Locale.US).format(val);
        }else{
            return "0";
        }
    }

并像这样在任何地方使用该功能:

String newNumber = Utils.getFormatedNumber("10000000");
于 2018-11-13T09:41:44.797 回答
2

添加如下文本更改侦听器(同时确保为 Edittext 选择的输入类型为数字):

etTest.addTextChangedListener(new TextWatcher() {

        boolean isManualChange = false;

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (isManualChange) {
                isManualChange = false;
                return;
            }

            try {
                String value = s.toString().replace(",", "");
                String reverseValue = new StringBuilder(value).reverse()
                        .toString();
                StringBuilder finalValue = new StringBuilder();
                for (int i = 1; i <= reverseValue.length(); i++) {
                    char val = reverseValue.charAt(i - 1);
                    finalValue.append(val);
                    if (i % 3 == 0 && i != reverseValue.length() && i > 0) {
                        finalValue.append(",");
                    }
                }
                isManualChange = true;
                etTest.setText(finalValue.reverse());
                etTest.setSelection(finalValue.length());
            } catch (Exception e) {
                // Do nothing since not a number
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
于 2013-11-05T12:23:41.380 回答
1

您可以使用数字格式

public static double getNumberByString(String s) throws ParseException {
    return NumberFormat.getInstance(Locale.getDefault()).parse(s).doubleValue();
}
于 2017-11-09T15:12:35.297 回答
1
public static String formatNumber(int number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(number);
}
public static String formatNumber(String number){
    return NumberFormat.getNumberInstance(Locale.getDefault()).format(Integer.parseInt(number));
}
于 2019-05-27T09:06:16.533 回答
0

我写了这个 Kotlin 扩展函数可能会有所帮助。

fun String.formatPoint(): String {
    val sb = StringBuilder()
    this.reversed().forEachIndexed { index, c ->
        // 123,123,123
        if ((index + 1) % 3 == 0) {
            if (index != this.length - 1) {
                sb.append("$c,")
            } else {
                sb.append(c)
            }
        } else {
            sb.append(c)
        }
    }

    return sb.toString().reversed()
}
于 2021-11-21T14:52:48.200 回答