加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – DecimalFormat在点后删除零

发布时间:2020-12-15 04:49:19 所属栏目:Java 来源:网络整理
导读:我想格式化用户的输入,它没关系,但是当我尝试在点DecimalFormat删除它之后输入零. 我使用以下代码: DecimalFormat df = new DecimalFormat("#,###.##"); Number n = df.parse(v); amountEdit.setText(df.format(n)); 示例输入/输出: 9.0 – 9. 9.9 – 9.9
我想格式化用户的输入,它没关系,但是当我尝试在点DecimalFormat删除它之后输入零.
我使用以下代码:

DecimalFormat df = new DecimalFormat("#,###.##");
 Number n = df.parse(v);
 amountEdit.setText(df.format(n));

示例输入/输出:

9.0 – > 9.

9.9 – > 9.9

9.90 – > 9.9

它删除了零!

编辑:

我有EditText和TextChangedListener
这个想法是格式化用户的输入,如999 999 999.99(这是最大值).

amountEdit.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s,int start,int count,int after) {

        }

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

            if (data.document.isPaymentPossible) {

                if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())) || s.toString().contains(".")) {
                    hasDot = true;
                } else {
                    hasDot = false;
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            String string = s.toString().replaceAll(".",",");

            if (string.equals(",") || string.equals(".")) {
                amountEdit.setText("");
                return;
            }

            amountEdit.removeTextChangedListener(this);

            payCustomAmount.setEnabled(amountEdit.getText().length() != 0);

            try {

                if (string.contains(",")) {
                    try {
                        String afterDot = string.split(",")[1];
                        if (afterDot.length() > 2) {
                            string = string.substring(0,string.length() - 1);
                            Number n = df.parse(string);
                            amountEdit.setText(df.format(n).replace(","."));
                            amountEdit.setSelection(amountEdit.getText().length());
                            amountEdit.addTextChangedListener(this);
                            showOverPaidText();
                            return;
                        }
                    } catch (Exception e) {
                        if (BuildConfig.DEBUG) {
                            SysUtils.logf("PaymentOptions input: " + s + "Exception: " + e);
                        }
                    }
                } else {
                    if (string.length() > 11) {
                        string = string.substring(0,string.length() - 1);
                        Number n = dfnd.parse(string);
                        amountEdit.setText(dfnd.format(n));
                        amountEdit.setSelection(amountEdit.getText().length());
                        showOverPaidText();
                        amountEdit.addTextChangedListener(this);
                        return;
                    }
                }

                int inilen,endlen;
                inilen = amountEdit.getText().length();

                String v = string.replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()),"");

                int cp = amountEdit.getSelectionStart();
                if (hasDot) {
                    Number n = df.parse(v);
                    String ss = df.format(n).replace(",".");
                    amountEdit.setText(ss);
                } else {
                    Number n = dfnd.parse(v);
                    amountEdit.setText(dfnd.format(n));
                }
                endlen = amountEdit.getText().length();
                int sel = (cp + (endlen - inilen));
                if (sel > 0 && sel <= amountEdit.getText().length()) {
                    amountEdit.setSelection(sel);
                } else {
                    amountEdit.setSelection(amountEdit.getText().length() - 1);
                }
            } catch (NumberFormatException | ParseException e) {
                showOverPaidText();
                amountEdit.addTextChangedListener(this);

                if (BuildConfig.DEBUG) {
                    SysUtils.logf("PaymentOptions input: " + s + "Exception: " + e);
                }
                return;
            }
            showOverPaidText();
            amountEdit.addTextChangedListener(this);
            return;
        }
    });

我的onCreate包含:

df = new DecimalFormat("#,###.00");
    df.setDecimalSeparatorAlwaysShown(true);
    dfnd = new DecimalFormat("#,###");

    hasDot = false;

解决方法

It removes zeros!

是的,它会 – 你专门使用.##这意味着“只包括数字,如果它们是重要的”.如果您想要始终至少有一个小数位,请使用

DecimalFormat df = new DecimalFormat("#,###.0#");

如果您总想要两位小数,请使用:

DecimalFormat df = new DecimalFormat("#,###.00");

您可能应该考虑如何格式化0.5.你想要“0.5”还是“.5”?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读