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

标签 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"    
}

也许有相同的解决方法,但仅适用于小数部分?

例如: 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
}

关于swift - 如何在 Swift 3 中将小数二进制转换为十进制小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175030/

相关文章:

ios - 在 iOS-charts swift iOS 8 中设置 yAxis

ios - 选项卡栏项目仅检测较长的单击

ios - 如何检索 Firebase 数据库文件夹中的列表?

ios - 在表格 View 单元格中使用 UILongPressGestureRecognizer 时出现问题

text - 这个二进制字符串是什么编码?

c++ - 如何在C++中从头到尾写入文件

object - Swift - 在 NSArray 中插入对象/项目/添加对象/项目

ios - 使用多点连接在两个设备之间同步计时器?

使用数组类型时 Swift 3 `+` 运算符错误

c# - 在c#中编码和解码安全吗?