Kotlin 二进制字符串转十进制数

Kotlin 二进制字符串转十进制数字

代码如下:

/**
 * 输入的字符串可以包含的字符 '0', '1', '.', 首位可以采用符号位'+'或‘-’
 * @return Any: 如果能正确转换为数字,返回的是10进制数(Int 或是 Float, 需要自己判断),否则返回 false
 */
fun String.stringToBinaryDigit() : Any {
    val sNum = this
    if (sNum.isEmpty()) return 0;
    var res = 0
    var iNum = 0.0
    var iSum = 1.0
    var isFloat = false
    var start = 1
    loop@ for (i in start until sNum.length){
        when(sNum[i]){
            '0' -> res *= 2
            '1' -> res = res * 2 + 1
            '.' -> {
                isFloat = true
                start ++
                break@loop
            }
            else -> return false
        }
        start ++
    }
    when(sNum[0]){
        '-' -> {
            res = -res
            iSum = -iSum
        }
        '+' -> {}
        '0', '1' -> {
            if (isFloat){
                res += ((sNum[0] - '0') shl (start - 2)) // 包含小数点  要多减一
            }else{
                res += ((sNum[0] - '0') shl (start - 1))
            }
        }
        else -> return false
    }
    if (isFloat){
        for(i in start until sNum.length){
            when(sNum[i]){
                '0' -> iNum *= 2
                '1' -> iNum = iNum * 2 + 1
                else -> return false
            }
            iSum *= 2
            start ++
        }
        return (res + iNum / iSum).toFloat()
    }else{
        return res
    }
}
println("-111.101 = ${"-111.101".stringToBinaryDigit()}")  // -7.625
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值