概述
1、调用如下: //删除监听不然会造成死循环模式 transfer_amount_et.removeTextChangedListener(this) amount = transfer_amount_et.text.toString().trim() nsfer_amount_et.setText(NumberUtil.toFloat(amount)) transfer_amount_et.setSelection(transfer_amount_et.text.toString().length) //完成输入金额继续添加监听事件 transfer_amount_et.addTextChangedListener(this) object NumberUtil { /** * 除法 */ fun div(a1: Double, b1: Double, scale: Int): Double { val a2 = BigDecimal(a1.toString()) val b2 = BigDecimal(b1.toString()) return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toDouble() } /** * TODO 除法运算,保留小数 * * @param denominator 被除数 分母 * @param numerator 除数 分子 * @return 商 */ fun toFloat(denominator: String): String { if (NumberUtil.isNumeric(denominator)) { return (denominator.toDouble() / 100).toString() } else { return getMoneyString(denominator).toString() } } /** *从右向左输入的金额 */ private fun getMoneyString(money: String): String? { var overMoney = "" //结果 val pointBoth = money.split("\.".toRegex()).toTypedArray() //分隔点前点后 val beginOne = pointBoth[0].substring(pointBoth[0].length - 1) //前一位 val endOne = pointBoth[1].substring(0, 1) //后一位 //小数点前一位前面的字符串,小数点后一位后面 val beginPoint = pointBoth[0].substring(0, pointBoth[0].length - 1) val endPoint = pointBoth[1].substring(1) Log.e( "Sun", pointBoth[0] + "===" + pointBoth[1] + "====" + beginOne + "=======" + endOne + "===>" + beginPoint + "==" + endPoint ) //根据输入输出拼点 overMoney = if (pointBoth[1].length > 2) { //说明输入,小数点要往右移 pointBoth[0] + endOne + "." + endPoint //拼接实现右移动 } else if (pointBoth[1].length < 2) { //说明回退,小数点左移 beginPoint + "." + beginOne + pointBoth[1] //拼接实现左移 } else { money } //去除点前面的0 或者补 0 val overLeft = overMoney.substring(0, overMoney.indexOf(".")) //得到前面的字符串 Log.e("Sun", "左邊:$overLeft===去零前$overMoney") if (overLeft == null || overLeft === "" || overLeft.length < 1) { //如果没有就补零 overMoney = "0$overMoney" } else if (overLeft.length > 1 && "0" == overLeft.subSequence(0, 1)) { //如果前面有俩个零 overMoney = overMoney.substring(1) //去第一个0 } Log.e("Sun", "結果:$overMoney") return overMoney } /** * 判断是否是整数 * * @param str * @return */ fun isNumeric(str: String?): Boolean { if (str == null) { return false } val sz = str.length for (i in 0 until sz) { if (Character.isDigit(str[i]) == false) { return false } } return true } }
最后
以上就是阳光保温杯为你收集整理的Android EditText从右向左输入的金额保留两位小数工具类的全部内容,希望文章能够帮你解决Android EditText从右向左输入的金额保留两位小数工具类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复