2017-11-08 1 views
2

나는이 코드는 바이너리 정수스위프트 3에서 소수 바이너리를 소수로 변환하는 방법은 무엇입니까?

for num in BinaryIntegerPart { 

     switch num { 

     case "0": result = result * 2 
     case "1": result = result * 2 + 1 
      print (result) 
     default: return "Error"  
} 

아마 같은 문제를 해결하지만 소수 부분이 진수로 변환 스위프트 3에 소수를 분수 진 부분을 변환하는 방법을 찾고 있어요? 예를 들어

: 101.0101 (10 진수) 5.3125에

+0

질문을 다시 쓸 수 있습니까? 현재 게시물에서 정확히 원하는 것을 얻는 것은 어렵습니다. – user28434

+0

예를 들어 "101.01"을 5.25로 변환 하시겠습니까? –

+0

User28434, okay –

답변

3

즉시 소수점이 결과에 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 
} 
+0

해결책 주셔서 감사합니다! –

관련 문제