更改小数分隔符

时间:2017-10-28 10:48:24

标签: java android

我想在我的应用中更改数字的分隔符。我用十进制格式试了一下。

DecimalFormat x=new DecimalFormat("##'##'##.###");
textview.setText(x.format("1564643");

但我得到了例外,因为十进制格式不支持符号(')。我甚至不知道我所做的是对还是不对。我只需要像12'23'52这样的格式。还有一个要求是,小数位分隔符(。)应替换为(,)。

任何人都可以帮助我。谢谢。 :)

3 个答案:

答案 0 :(得分:3)

试试这个

Locale currentLocale = Locale.getDefault();
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setGroupingSeparator('\'');

DecimalFormat formatter = new DecimalFormat("#,#0",otherSymbols);
//If you want to parse the String use 
//formatter.format(Integer.parseInt("1564643"))
textview.setText(formatter.format(1564643));

答案 1 :(得分:2)

我将此类用于EditText。您可以使用其中一部分来解决您的问题。

public class NumberTextWatcherWithSeperator implements TextWatcher {

private EditText editText;

public NumberTextWatcherWithSeperator(EditText editText) {
    this.editText = editText;
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void afterTextChanged(Editable s) {
    try {
        editText.removeTextChangedListener(this);
        String value = editText.getText().toString();

        if (!value.equals("")) {

            if (value.startsWith(".")) {
                editText.setText("0.");
            }
            if (value.startsWith("0") && !value.startsWith("0.")) {
                editText.setText("");

            }

            String str = editText.getText().toString().replaceAll("'", "");
            if (!value.equals(""))
                editText.setText(getDecimalFormattedString(str));
            editText.setSelection(editText.getText().toString().length());
        }
        editText.addTextChangedListener(this);
    } catch (Exception ex) {
        ex.printStackTrace();
        editText.addTextChangedListener(this);
    }
}

private static String getDecimalFormattedString(String value) {
    StringTokenizer lst = new StringTokenizer(value, ".");
    String str1 = value;
    String str2 = "";
    if (lst.countTokens() > 1) {
        str1 = lst.nextToken();
        str2 = lst.nextToken();
    }
    StringBuilder str3 = new StringBuilder();
    int i = 0;
    int j = -1 + str1.length();
    if (str1.charAt(-1 + str1.length()) == '.') {
        j--;
        str3 = new StringBuilder(".");
    }
    for (int k = j; ; k--) {
        if (k < 0) {
            if (str2.length() > 0)
                str3.append(".").append(str2);
            return str3.toString();
        }
        if (i == 2) {
            str3.insert(0, "'");
            i = 0;
        }
        str3.insert(0, str1.charAt(k));
        i++;
    }

}
}

并在您的活动中使用如下:

    EditText editText = findViewById(R.id.et);
    editText.addTextChangedListener(new NumberTextWatcherWithSeperator(editText));

答案 2 :(得分:0)

1.使用new DecimalFormat("##,##");格式化

2.使用replaceAll(",", "'");替换

3.使用setText将文字设为TextView

试试这个。

DecimalFormat mFormat = new DecimalFormat("##,##");
String yourFormattedString = mFormat.format(1564643);
String result = yourFormattedString.replaceAll(",", "'");
Log.e("DecimalFormat", result);
textview.setText(result);

<强>输出

1'56'46'43