EditText限制小数点前后位数
在EditText输入数字的时候,通常我们需要限制小数点前后位数.比如金额输入一般我们需要限制小数点后面最多2位.我们可以通过 TextWatcher 实现.
public class MyWatcher implements TextWatcher {
private int beforeDot;
private int afterDot;
/**
* 构造器
*
* @param beforeDot 小数点前位数 不限制输入-1
* @param afterDot 小数点后位数 不限制输入-1
*/
public MyWatcher(int beforeDot, int afterDot) {
this.beforeDot = beforeDot;
this.afterDot = afterDot;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
judge(s);
}
private void judge(Editable editable) {
String temp = editable.toString();
int posDot = temp.indexOf(".");
//直接输入小数点的情况
if (posDot == 0) {
editable.insert(0, "0");
return;
}
//连续输入0
if (temp.equals("00")) {
editable.delete(1, 2);
return;
}
//输入"08" 等类似情况
if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {
editable.delete(0, 1);
return;
}
//不包含小数点 不限制小数点前位数
if (posDot < 0 && beforeDot == -1) {
//do nothing 仅仅为了理解逻辑而已
return;
} else if (posDot < 0 && beforeDot != -1) {
//不包含小数点 限制小数点前位数
if (temp.length() <= beforeDot) {
//do nothing 仅仅为了理解逻辑而已
} else {
editable.delete(beforeDot, beforeDot + 1);
}
return;
}
//如果包含小数点 限制小数点后位数
if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {
editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数
}
}
}
使用的时候 如下:
<EditText
android:id="@+id/et_i_want"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:hint="0.00"
android:inputType="numberDecimal"/>
etIWant.addTextChangedListener(new MyWatcher(-1, 2));//限制小数点后最多2位
EditText限制小数点前后位数的更多相关文章
- C# Double保留小数点后面位数
C# Double保留小数点后面位数 有的时候我们要对一些数据进行百分比的操作.一般的数据我们只要用 .ToString("P")就可以得到小数点后2位的百分比.而且是自动 加上% ...
- python 浮点运算 及 小数点精确位数
>>> 1050 / 3133>>> 1050 / float(31)33.87096774193548 # 分子或者分母用 ...
- java之数据处理,小数点保留位数
1.返回字符串类型,保留后两位: public static String getRate(Object d) { return String.format("%.2f", d); ...
- input限制小数点的位数
在做限制input小数点的时候,我本来想通过vue里面的的watch监听来实现, ---实现逻辑是,通过监听输入的内容,当出现"."(点)的时候,记录通过indexOf获取点的位置 ...
- 修改ECSHOP的小数点保留位数
客户站点http://carfa.hk79.2ifree.com 原来的程序直接取整了,现在做下面修改. 首先打开文件 /carfa/web/includes/lib_common.php 第一步:在 ...
- xcart小数点位数
xcart小数点的位数默认是2位,有时候需要根据需要更改位数:一开始以为把数据库中的数据类型的位数更改过后,就能生效,结果发现xcart在程序中作了限制,只能是2位.那么只能通过更改程序的方式来更改了 ...
- iOS textField输入金额的限制,小数点前9位,后面两位
iOS textField输入金额的限制,小数点前9位,后面两位,如果不加小数点,最大位数是9位,加上小数点,最大位数是12位,超出最大位数可删除 - (BOOL)textField:(UITextF ...
- JAVA float double数据类型保留2位小数点5种方法
/** * Java 两个整数相除保留两位小数,将小数转化为百分数 * java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或 ...
- java小数点的两种处理方法
1. java.text.DecimalFormat; //此方法为四舍五入 例如:DecimalFormat df = new DecimalFormat("#.0" ...
随机推荐
- jquery 页面滚动到底部自动加载插件集合
很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容.下面为你推荐 10 个 jQuery 的无限滚动的插件: 1. jQuery ScrollPa ...
- 【Python文件处理】递归批处理文件夹子目录内所有txt数据
因为有个需求,需要处理文件夹内所有txt文件,将txt里面的数据筛选,重新存储. 虽然手工可以做,但想到了python一直主张的是自动化测试,就想试着写一个自动化处理数据的程序. 一.分析数据格式 需 ...
- Decode Ways
https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...
- 数独 JAVA实现
数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的 然后大二学了JAVA,看了下那个一些有关于 ...
- 备份了我的CSDN博客
刚用cnblogs的“博客搬家”功能把我此前在csdn发的所有文章都备份过来了. 发现cnblogs的博客备份功能比较好的一点是——文章的发表时间和原来的一致! 上次在CSDN发博客的时间是2015- ...
- C#版BitStream 1.0
根据C++版的改编,刚刚改完,估计使用会有问题,对于uint8处理的不好 关于使用: BitStream bs = new BitStream( ); bs.WriteInt32( ); int a ...
- C/C++: C++位域和内存对齐问题
1. 位域: 1. 在C中,位域可以写成这样(注:位域的数据类型一律用无符号的,纪律性). struct bitmap { unsigned a : ; unsigned b : ; unsigned ...
- oracleDBA-D4
1.数据字典: 创建和维护的可修改的系统表..它存放有关数据库和数据库对象的信息. 数据字典=基表+字典视图 2.数据字典所存放的信息: 数据库的逻辑和物理结构(如:表空间和数据文件),数据对象定义的 ...
- 401 - 未授权:由于凭据无效,访问被拒绝”在iis的解决办法
1.打开"IIS信息服务管理器"-->选择你发布的网站-->选择功能视图中的"身份验证"-->右键匿名身份验证,选择"编辑" ...
- Js中 md5 sha1 base64 加密
js的3中加密方式: .sha1加密,加密性高 调用: var sha = hex_sha1(str); .base64加密 调用: var b = new Base64(); var str = b ...