【问题标题】:How to convert a fractional binary to decimal fraction in Swift 3?如何在 Swift 3 中将小数二进制转换为小数?
【发布时间】:2017-11-08 08:42:19
【问题描述】:

我正在寻找一种在 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(十进制)

【问题讨论】:

  • 你能重新编辑问题吗?很难从当前的帖子中得到你想要什么。
  • 所以您想例如将“101.01”转换为 5.25 吗?
  • User28434,好的
  • 马丁,没错

标签: swift swift3 binary decimal


【解决方案1】:

一旦遇到小数点就必须切换 将 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
}

【讨论】:

  • 感谢您的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
相关资源
最近更新 更多