您好,欢迎来到乌哈旅游。
搜索
您的当前位置:首页Kotlin 二进制字符串转十进制数

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- wuhaninfo.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务