edittext实现显示千分位格式

在edittext中你在输入1123456789过程中自动显示为1,123,456,789这种千分位格式的。那么我们该怎么做呢? 查阅Android edittext api发现它有这样一个方法addTextChangedListener,这个方法就是用来监听用户在输入过程中的事件监听,它会重写这几个方法:

  1. editText.addTextChangedListener(new TextWatcher() {
  2. @Override
  3. public void onTextChanged(CharSequence s, int start, int before, int count) {
  4. // TODO Auto-generated method stub
  5. }
  6. @Override
  7. public void beforeTextChanged(CharSequence s, int start, int count,
  8. int after) {
  9. // TODO Auto-generated method stub
  10. }
  11. @Override
  12. public void afterTextChanged(Editable s) {
  13. // TODO Auto-generated method stub
  14. }
  15. });

不难发现。从字面意思理解我们需实现这个功能就需要在afterTextChanged()这个方法中写我们的逻辑代码,代码如下:

  1. @Override
  2. ublic void afterTextChanged(Editable s) {
  3. // TODO Auto-generated method stub
  4. if (!StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))) {
  5. editText.setText(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText));
  6. editText.setSelection(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText).length());
  7. }

StringUtils.addComma这个方法我是写成了一个帮助类,方便重复调佣

  1. public static String touzi_ed_values22 = "";
  2. /**
  3. * 在数字型字符串千分位加逗号
  4. * @param str
  5. * @param edtext
  6. * @return sb.toString()
  7. */
  8. public static String addComma(String str,EditText edtext){
  9. touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");
  10. boolean neg = false;
  11. if (str.startsWith("-")){  //处理负数
  12. str = str.substring(1);
  13. neg = true;
  14. }
  15. String tail = null;
  16. if (str.indexOf(‘.‘) != -1){ //处理小数点
  17. tail = str.substring(str.indexOf(‘.‘));
  18. str = str.substring(0, str.indexOf(‘.‘));
  19. }
  20. StringBuilder sb = new StringBuilder(str);
  21. sb.reverse();
  22. for (int i = 3; i < sb.length(); i += 4){
  23. sb.insert(i, ‘,‘);
  24. }
  25. sb.reverse();
  26. if (neg){
  27. sb.insert(0, ‘-‘);
  28. }
  29. if (tail != null){
  30. sb.append(tail);
  31. }
  32. return sb.toString();
  33. }


码中,我定义了一个静态的变量touzi_ed_values22是为了方便与activity中的
StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))
做判断,判断在输入过程中是否不同,也就是数值改变了,如果改变了,那么就会调用addComma()方法返回新的字符串数值赋值给edittext。
其中addComma中的touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");非常关键。它是为了不断获取当前数值与返回后的数值进行比较,如果没有这句代码。你的app将再edittext输入时就会出现卡死现象,因为你的touzi_ed_values22是永远为空的。在作比较的时候会进入该方法,就会无限赋值无限判断。

时间: 2024-11-03 21:11:08

edittext实现显示千分位格式的相关文章

JavaScript加减计算方法和显示千分位

Math.formatFloat = function (f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m; }; 使用:var fee = Math.formatFloat(Number(a) + Number(b), 8).toFixed(2); function formatThousand(num) { num = num + ""; var re = /(-?\d+)(\d{3})/

js从千分位格式

从千分位格式化谈JS性能优化 http://heeroluo.net/article/detail/115 方法六 // 方法六 function toThousands(num) { return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); }

sql为数字添加千分位(也就是钱的格式)

感觉这个东西在项目中用得挺多的,之前在前台页面是用正则来处理,现在由于是数据查询,所以直接在查出数据的时候将其转为指定的千分位格式,省的前台再处理,不讲原理,因为我也看不懂,不过会用就行了,在网上找了下,现在自己记录下,方便自己查看. Sql获取数字的千分位,就是将一个数字以三位,用逗号隔开,sql代码如下: (1)不带小数点: select reverse(stuff(reverse(convert(varchar,convert(money,1234333000),1)),1,3,''))

js jquery版本的 金额千分位转换函数(非正则,效率极高)

没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专门写了一个纯数值处理最后输出字符串个 金额千分位处理函数,并封装成jQuery函数包,处理时效率很高,可高频率的使用,直接上代码.还有min压缩版本可点击连接下载. 如果你不是jQuery环境,直接把源码拿出来,重新封装到自己的函数中能够就能用. 源码以及min包下载地址:jQuery.format

千分位设置

C#中千分位问题                                                                  1.C#中用最简单的方法把数字(不含小数)转换为千分位格式: 如1234567变成1,234,567 方法:1234567.ToString("###,###") 或 1234567.ToString("N0") 2.C#中把数字转换成带两位小数的千分位字符: 如1234567.891变成1,234,567.89 方法:

C#数字千分位问题

1.C#中用最简单的方法把数字(不含小数)转换为千分位格式:     如1234567变成1,234,567 方法:1234567.ToString("###,###")   或  1234567.ToString("N0") 2.C#中把数字转换成带两位小数的千分位字符: 如1234567.891变成1,234,567.89 方法:String.Format("{0:N}",1234567.891);   //默认为两位小数,如果没有小数位,则

c# 数字转成千分位字符串

首先要明确带了逗号之后  数字就变成字符串了 ,不再是数字了. 昨天做项目的时候需要格式化数字变成带逗号的,本来打算自己写个方法的,后来时间太紧了,就打算从网上查个,查来查去都是要对字符串的位进行操作,选了其中一个用了下,结果发现还有问题,瞬间无语 最中被我百度到了  这种写法   : C#中用最简单的方法把数字(不含小数)转换为千分位格式: 如1234567变成1,234,567 方法:x.ToString("###,###")   或  1234567.ToString("

总计字段上加格式:如千分位 比较笨拙的一种方法

//总计字段上加格式:如千分位1.MonWastageSumVO1为table名称2.Totalloss对应table总计字段名称3.bValues是赋给总计的值OATableBean table = (OATableBean)webBean.findIndexedChildRecursive("MonWastageSumVO1");OAWebBean abl = table.findIndexedChildRecursive("Totalloss");if (nu

easyui datagrid 格式化列显示两位小数、千分位

{ field: "contractmoney", title: "合同总价", width: 72, formatter: function (value, row, index) { if (row != null) { return parseFloat(value).toFixed(2); } } }, //二位小数.千分位 { field: "price", title: "单价", width: 60, align