Android DecimalFormat无法正确格式

时间:2017-09-07 06:18:18

标签: java android kotlin decimalformat

我在DecimalFormat中使用TextWatcher,这是我的代码:

override fun afterTextChanged(p0: Editable?) {
            amountEt?.removeTextChangedListener(this)

            var df = DecimalFormat("#,###.##")
            df.maximumFractionDigits = 2
            df.minimumFractionDigits = 0
            if (hasFractionalPart) {
                df.isDecimalSeparatorAlwaysShown = true
            }
            try {
                val inilen: Int
                val endlen: Int
                inilen = amountEt?.text!!.length

                var text: String? = p0.toString().replace(df.decimalFormatSymbols.groupingSeparator.toString(), "")
                //text = text?.replace(df.decimalFormatSymbols.decimalSeparator.toString(), "")
                var n = df.parse(text)
                var t = df.format(n)
                val cp = amountEt?.selectionStart
                amountEt?.setText(t)
                endlen = amountEt?.text!!.length
                val sel = cp!!.plus(endlen - inilen)
                if (sel > 0 && sel <= amountEt?.text!!.length) {
                    amountEt?.setSelection(sel)
                } else {
                    // place cursor at the end?
                    amountEt?.setSelection(amountEt?.text!!.length - 1)
                }
            } catch (e: Exception) {
                Log.d("ERROR", e.stackTrace.toString())
            }

            amountEt?.addTextChangedListener(this)
        }

我的问题是用户想要写入amountEt(这是一个EditText),例如: 1.02

但是当用户将写入我的edittext时,df.format(n)行结果将为 1

我该如何解决这个问题?

更新: 我调试了我的代码,如果我在编辑文本中编写7.0,我得到了这个:

text =&#34; 7.0&#34;

n = 7 (类型为数字)

如果我更改此行:

var n = df.parse(text)

到此:

var n = df.parse(text).toDouble()

n = 7.0

t =&#34; 7。&#34;

这是关于我的调试器的图片: enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用此代码转换为double

public static double Round(double value, int places) {
        if (places < 0) throw new IllegalArgumentException();
        long factor = (long) Math.pow(10, places);
        value = value * factor;
        long tmp = Math.round(value);
        return (double) tmp / factor;
    }

答案 1 :(得分:1)

尝试使用DecimalFormat(“#,###。00”)代替DecimalFormat(“#,###。##”)

答案 2 :(得分:0)

您好请检查以下代码的十进制格式

public static String roundTwoDecimalsString(double d) {
        /*DecimalFormat twoDForm = new DecimalFormat("#.##");*/
        DecimalFormat df = new DecimalFormat("#.##");
        String formatted = df.format(d);
        return formatted;
    }