java - 如何使用 TextWatcher Android 添加 3 位小数货币格式到 edittext

标签 java android android-edittext number-formatting android-textwatcher

我想使用 TextWatcher3 位小数 货币格式 添加到 EditText 开始时,值为0.000并且数字应该从右到左改变

例如:如果我在订单中按 1,2,3,4,5,值应显示为 12.345

以下代码仅适用于小数点后两位。请任何人帮助我如何将此代码更改为小数点后 3 位或其他解决方案

 public class CurrencyTextWatcher  implements TextWatcher {
    boolean mEditing;
    Context context;


    public CurrencyTextWatcher() {
        mEditing = false;
    }

    public synchronized void afterTextChanged(Editable s) {

        if(!mEditing) {
            mEditing = true;
            String digits = s.toString().replaceAll("\\D", "");
             NumberFormat nf = NumberFormat.getCurrencyInstance();

            try{
                String formatted = nf.format(Double.parseDouble(digits)/100);
                s.replace(0, s.length(), formatted);
            } catch (NumberFormatException nfe) {
                s.clear();
            }
            mEditing = false;
        }
    }

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

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

}

最佳答案

将 1000 而不是 100 除以 NumberFormatsetMinimumFractionDigits 为 3。

public class CurrencyTextWatcher  implements TextWatcher {
    boolean mEditing;
    Context context;


    public CurrencyTextWatcher() {
        mEditing = false;
    }

    public synchronized void afterTextChanged(Editable s) {

        if(!mEditing) {
            mEditing = true;
            String digits = s.toString().replaceAll("\\D", "");
            NumberFormat nf = NumberFormat.getCurrencyInstance();
            nf.setMinimumFractionDigits(3);

            try{
                String formatted = nf.format(Double.parseDouble(digits)/1000);
                s.replace(0, s.length(), formatted);
            } catch (NumberFormatException nfe) {
                s.clear();
            }
            mEditing = false;
        }
    }

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

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

}

关于java - 如何使用 TextWatcher Android 添加 3 位小数货币格式到 edittext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56953545/

相关文章:

android - 从编辑文本中过滤 ListView

java - 如何使用 Java 正则表达式从 URI 中提取 UUID

java - 使用 Java 实现 Shopify 的 GraphQL

android - 尝试在Android Studio中使用Gradle进行构建时出错

javascript - Worklight - Paho MQTT JavaScript : Always timeout on Android device and works in simulator

java - android java 搜索 listview clickedItem

java - hibernate 抛出 "deleted object would be re-saved by cascade (remove deleted object from associations)"

java - 使用 mockito 的 Gradle testCompile 找不到包

android - 无法解析或不是字段

android - 检测 EditText 的变化(TextWatcher 无效)