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