Làm cách nào để tôi có thể định dạng số Chuỗi để có dấu phẩy trong Trường chỉnh sửa android


77

Đối với chức năng nào tôi có thể sử dụng trong android để hiển thị số thành các định dạng khác nhau.

Ví dụ: Nếu tôi nhập 1000 thì nó sẽ hiển thị như thế này 1.000. Nếu tôi nhập 10000 thì nó sẽ hiển thị như thế này 10.000. Nếu tôi nhập 1000000 thì nó sẽ hiển thị như thế này 1.000.000.

Xin vui lòng hướng dẫn cho tôi.

Câu trả lời:


162

Bạn có thể sử dụng DecimalFormatvà chỉ cần định dạng số

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

Kết quả sẽ là

  • 1,000,000 với giá 1000000
  • 10,000 với giá 10000
  • 1,000 cho 1000

Cập nhật 12/02/2019

Đây String.format("%,d", number)sẽ là một giải pháp tốt hơn (ít mã cứng hơn) như được chỉ ra trong nhận xét bên dưới của @DreaminginCode, vì vậy tôi nghĩ tôi sẽ thêm nó vào đây như một giải pháp thay thế


nhưng nếu tôi nhập 100000 nó hiển thị 100.000 thay vì tôi cần như thế này 1.00000, có được không?
user1082964

5
Tại sao bạn muốn làm điều đó? 100.000 là tiêu chuẩn. Hãy thử di chuyển dấu phẩy ở định dạng băm như sau #, ##, ###. Không biết nó có hiệu quả không nhưng bạn có thể thử.
the-gừng-geek

3
@Neil, tiêu chuẩn chỉ có hiệu lực đối với các quốc gia cụ thể. Chẳng hạn như, Ấn Độ có một tiêu chuẩn khác và có định dạng #, ##, ###
gonephishing,

7
Nó trả lời câu hỏi nhưng trả lời một câu hỏi không tự động biến nó thành một câu trả lời hay. Và khi thông tin không đủ, tôi tin rằng một người là một lập trình viên nên giả định ít hơn thay vì nhiều hơn. Các câu trả lời sử dụng mã hóa cứng có thể bị hỏng dễ dàng khi các giả định thay đổi và trong trường hợp này, mã hóa cứng đặc biệt tồi tệ đối với bất kỳ mã nào liên quan đến i18n vì luôn có thể có người trong tương lai cố gắng thêm i18n và đó sẽ là thời điểm wtf của họ. Chưa kể chỉ cần một con số lớn hơn cũng có thể phá vỡ điều này. Đối với một giải pháp đơn giản hơn nhiều, bạn có thể đã sử dụng String.format("%,d", number)đó là ngắn và chính xác
Hải Zhang

1
tôi có thể thêm số thập phân phía sau như 1.000.000.50 không? Hay 1M.50? @Neil
Leon Zaii

44

hãy thử cái này hy vọng nó sẽ hữu ích.

 System.out.println(NumberFormat.getNumberInstance(Locale.US).format(1000));

4
Để an toàn, có thể bạn sẽ muốn sử dụng ngôn ngữ của thiết bị, không phải lúc nào cũng là Hoa Kỳ. Ngôn ngữ hiện tại = getResources (). GetConfiguration (). Locale;
Matt

5
Locale.getDefault () là một cách dễ dàng hơn để lấy ngôn ngữ của thiết bị.
Gober

3
Theo Tài liệu Java , các get...Instance()phương thức không tham số sử dụng ngôn ngữ mặc định theo mặc định.
Juan De la Cruz

11
private String getFormatedAmount(int amount){
  return NumberFormat.getNumberInstance(Locale.US).format(amount);
}

7
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));
}

ĐẦU RA

1
10
100
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000

4

Thêm chức năng này trong lớp chung

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

Và sử dụng chức năng đó ở mọi nơi như thế này:

String newNumber = Utils.getFormatedNumber("10000000");

2

Thêm trình nghe thay đổi văn bản như bên dưới (Đồng thời đảm bảo rằng loại đầu vào được chọn cho Edittext là Number):

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

        }
    });

1

Bạn có thể sử dụng Numberformat

public static double getNumberByString(String s) throws ParseException {
    return NumberFormat.getInstance(Locale.getDefault()).parse(s).doubleValue();
}

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));
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.