在Androi开发中,有关数字的的需求有很对,比如在输入金额的时候,正常的逻辑应该是只能输入小数点后两位,而且,你取得钱不能大于你的余额,
你输入类似01,02这样的数字时,程序会自动把无用的0去掉,这就是我写这个工具类的目的,最开始想写成正则的形式,但是没有想好,就写了这个工具类,
利用异常处理,抛砖引玉吧,希望大家能写出更好的方法。
/** * 只能输入指定位数小数* stringLength 代表指定位数 */ public static void onePointDecimals(Editable s,int stringLength) { if (s.toString().trim().isEmpty()) { return; } try {//找到第一个小数点的位置 int start = s.toString().indexOf('.'); if (start == 0) { s.replace(0, 1, "0."); }//测量出小数点后的长度, int textLength = s.toString().length() - start; if (start > 0) { if (textLength > stringLength) { s.delete(s.length() - 1, s.length()); } //处理负数 else if (textLength > (stringLength+1) && s.toString().indexOf('-') == 0 ) { s.delete(s.length() - 1, s.length()); } if (s.toString().indexOf('0') == 0) { if (s.toString().indexOf('1') == 1 || s.toString().indexOf('2') == 1 || s.toString().indexOf('3') == 1 || s.toString().indexOf('4') == 1 || s.toString().indexOf('5') == 1 || s.toString().indexOf('6') == 1 || s.toString().indexOf('7') == 1 || s.toString().indexOf('8') == 1 || s.toString().indexOf('9') == 1) { s.delete(s.length() - 2, s.length() - 1); } } //处理负数 else if (s.toString().indexOf('-') == 0 && s.toString().indexOf('0') == 1) { if (s.toString().indexOf('1') == 2 || s.toString().indexOf('2') == 2 || s.toString().indexOf('3') == 2 || s.toString().indexOf('4') == 2 || s.toString().indexOf('5') == 2 || s.toString().indexOf('6') == 2 || s.toString().indexOf('7') == 2 || s.toString().indexOf('8') == 2 || s.toString().indexOf('9') == 2) { s.delete(s.length() - 3, s.length() - 2); } } Double.valueOf(s.toString()); if (s.toString().equals("00")) { s.delete(s.length() - 1, s.length()); }else if(s.toString().equals("-00")){s.delete(s.length(), s.length()- 2);} }
//添加大小判断在此处添加
} catch (Exception e) { //只要出现异常就会执行删除前一个文字 e.printStackTrace(); s.delete(s.length() - 1, s.length()); } }
//如果需要判断是否大于某个数字,在catch前注释处添加,入参加上这个数字
if (Double.valueOf(s.toString()) > num) { s.delete(s.length() - 1, s.length()); }
第一次写博客,写的东西有可能有不详细的地方,希望大家多提建议,我会写的越来越好的