如何使用 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 【问题描述】:我想使用 TextWatcher 将 3 个小数位 货币格式 添加到 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,还将 setMinimumFractionDigits
与 NumberFormat
除以 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
在 EditText 上使用 TextWatcher 在 android 中实时计算总数和总和?