我是靠谱客的博主 阳光保温杯,最近开发中收集的这篇文章主要介绍Android EditText从右向左输入的金额保留两位小数工具类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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从右向左输入的金额保留两位小数工具类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部