如何在Swift 3中将分数二进制转换为十进制分数?
我正在寻找一种在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" } 也
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,是的,非常感谢你的解决方案!