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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复