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

Posted

技术标签:

【中文标题】如何使用 TextWatcher Android 将 3 位小数货币格式添加到edittext【英文标题】:How to add 3 decimal places Currency formatting to edittext Using TextWatcher Android 【发布时间】:2019-07-09 13:18:42 【问题描述】:

我想使用 TextWatcher3 个小数位 货币格式 添加到 EditText 一开始,值是0.000,数字应该从右到左变化

例如:如果我按顺序按 1、2、3、4、5,则值应显示为 12.345

以下代码仅适用于小数点后 2 位。请任何人帮助我如何将此代码更改为小数点后 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)  


【问题讨论】:

【参考方案1】:

除以 1000 而不是 100,还将 setMinimumFractionDigitsNumberFormat 除以 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)  


【讨论】:

除以 1000 时仍显示编辑文本中的 2 位小数,并且输入更改不能作为方面

以上是关于如何使用 TextWatcher Android 将 3 位小数货币格式添加到edittext的主要内容,如果未能解决你的问题,请参考以下文章

Android listview item中使用TextWatcher

Android 文本监听接口TextWatcher详解

android之TextWatcher的监听

在 EditText 上使用 TextWatcher 在 android 中实时计算总数和总和?

Android使用TextWatcher匹配email造成ANR的解决

Android使用TextWatcher匹配email造成ANR的解决