簡體   English   中英

Android edittext:格式化數字

[英]Android edittext: Formatting number

我有一個edittext ,如果我輸入數字為100000 ,結果必須是100.000 ,如果我輸入輸入為1000000 ,結果必須是1.000.000

從最后到開始每3個字符后必須有一個“ .

這是我的代碼:

tambah = (EditText)rootView.findViewById(R.id.total);
tambah.setOnFocusChangeListener(new OnFocusChangeListener(){
       public void onFocusChange(View v, boolean hasFocus) {
              // ...
       }

這是我用來輸入美元的東西。 它確保始終只有小數點后 2 位。 您應該能夠通過刪除 $ 符號來使其適應您的需求。

amountEditText.setRawInputType(Configuration.KEYBOARD_12KEY);
amountEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
    {
        String userInput= ""+s.toString().replaceAll("[^\\d]", "");
        StringBuilder cashAmountBuilder = new StringBuilder(userInput);

        while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
            cashAmountBuilder.deleteCharAt(0);
        }
        while (cashAmountBuilder.length() < 3) {
            cashAmountBuilder.insert(0, '0');
        }
        cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
        cashAmountBuilder.insert(0, '$');

        amountEditText.setText(cashAmountBuilder.toString());
        // keeps the cursor always to the right
        Selection.setSelection(amountEditText.getText(), cashAmountBuilder.toString().length());

    }

}
});

你應該使用'java.text.NumberFormat'

java.text.NumberFormat nf = java.text.NumberFormat.getInstane();
nf.setMaximumFractionDigits(0);
String formattedNumber = nf.format(Integer.parseInt(edittext.getText());

使用 editText.setOnTextChangeListener() 並檢查每次位置是否是 3 的倍數,在那里放一個 .(dot) ..

首先用%,d格式格式化你的字符串,然后用 (.) 替換所有的 (,) ,如下所示......

    String formatedString = (String.format("%,d", 1000000)).replace(',', '.');

    Log.d("Fomated String", formatedString);

輸出:

 D/Fomated String(20323): 1.000.000

用以下循環來做如何。

String Number=1000000;
final int THREE=3;
int noOfPoints,length,Start=0,End=0;

length=Number.length();
noOfPoints=length%THREE;
if(noOfPoints*THREE==length)
noOfPoints--;
String OutPut="";

for(int Count=0;Count<=noOfPoints;Count++)
{
Start=End;
if(Count==0)
End=length-(THREE*noOfPoints);
else
End=Start+THREE;

if(Count!=noOfPoints)
OutPut+=Number.substring(Start,End)+".";
else
OutPut+=Number.substring(Start,End);
}

這是另一個答案。 希望它有幫助,簡單,它會格式化給定參數的大小(格式大小,看看示例調用)看看。

/** * * @param input * @param formatsize * @return */

public String format(String input, int formatsize) {

    String formattedNumberString = "";
    int len = input.length();

    if (len < formatsize)
        return input;

    if (formatsize < 2) {
        System.out.println("Opppps");
        return "";
    }

    for (int i = 0; i < len; i += formatsize) {
        if (i < formatsize) {
            formattedNumberString = input.substring(input.length()
                    - formatsize - 1, input.length() - 1);
        } else {

            if (len - i <= formatsize) {
                formattedNumberString = input + "." + formattedNumberString;
            } else {
                formattedNumberString = input.substring(input.length()
                        - formatsize - 1, input.length() - 1)
                        + "." + formattedNumberString;
            }
        }

        if (input.length() >= formatsize)
            input = input.substring(0, len - i - formatsize);
    }

    return formattedNumberString;
}

調用這個函數就像..(例如)

NumberFormatterClass nfc = new NumberFormatterClass();
System.out.println(nfc.format("1032432420000000000000", 3));
System.out.println(nfc.format("1032432420000000000000", 4));
System.out.println(nfc.format("1032432420000000000000", 5));
System.out.println(nfc.format("1032432420000000000000", 2));

問候...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM