我正在寻找一种在 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/