如何在Swift 3中将分数二进制转换为十进制分数?

如何在Swift 3中将分数二进制转换为十进制分数?,swift,swift3,binary,decimal,Swift,Swift3,Binary,Decimal,我正在寻找一种在Swift 3中将分数二进制部分转换为小数的方法。此代码将二进制整数转换为十进制 for num in BinaryIntegerPart { switch num { case "0": result = result * 2 case "1": result = result * 2 + 1 print (result) default: return "Error" } 也

我正在寻找一种在Swift 3中将分数二进制部分转换为小数的方法。此代码将二进制整数转换为十进制

for num in BinaryIntegerPart {

        switch num {

        case "0": result = result * 2
        case "1": result = result * 2 + 1
            print (result)
        default: return "Error"    
}
也许有相同的解决方法,但只适用于部分

例如:
101.0101到5.3125(十进制)

一旦遇到小数点,就必须切换 将1/2的幂加到结果中:

func fractionalBinaryToDecimal(bin: String) -> Double? {
    var result = 0.0
    var inFractionalPart = false // Set to `true` if the decimal point is encountered
    var fractionalValue = 1.0 // Current power of 1/2 when adding the fractional part

    for digit in bin.characters { // Swift 4: for digit in bin { ...
        switch digit {
        case "0":
            if inFractionalPart {
                fractionalValue /= 2.0
            } else {
                result = 2 * result
            }
        case "1":
            if inFractionalPart {
                fractionalValue /= 2.0
                result += fractionalValue
            } else {
                result = 2 * result + 1
            }
        case ".":
            guard !inFractionalPart else { return nil } // Repeated decimal point
            inFractionalPart = true
        default:
            return nil // Invalid digit
        }
    }

    return result
}
例如:

if let val = fractionalBinaryToDecimal(bin: "101.0101") {
    print(val) // 5.3125
}

你能重新编辑这个问题吗?很难从当前帖子中得到你到底想要什么。所以你想把“101.01”转换成5.25?用户28434,okayMartin,是的,非常感谢你的解决方案!