2017-10-15 1 views
0

Swift 3에서 부동 소수점이있는 소수를 부동 소수점으로 변환하는 간단한 방법을 찾고 있습니다. 예를 들어,이 코드는 십진수를 아무런 문제없이 이진수로 변환합니다.Swift 3에서 10 진수 (부동 소수점 사용)를 2 진수로 변환하는 방법은 무엇입니까?

func convertToBinary(decimal: Int) -> String { 

    var n = 0, c = 0, k: [String] = [], fs: String = "" 

    n = decimal 

    while n > 0 { 

     c = n % 2 
     n = n/2 
     k.append("\(c)") 

    } 

    for i in k.reversed() { 

     fs += "\(i)" 

    } 

    return fs 


} 

불행하게도, 나는 그것을 떠 소수를 변경하고있어 경우에하면 오류 메시지가 를 보여줍니다

c = n % 2 

내가 변화하고있어 경우 변수 " '내부'를 입력 유형 '플로트'의 값을 할당 할 수 없습니다"

좋아, 그럼 난에 '%'를 변경 :

: 그것을 떠 C는 "사용 truncatingRemainder 대신 '%'는 사용할 수 없습니다"또 다른 오류 메시지가 표시

모든 것이 작동했습니다. 불행하게도이 프로그램은 분할 무한 진수 (예) :

0.0 
0.0 
1.0 
0.5 
0.25 
1.125 
1.5625 
0.78125 
0.390625 
0.195312 
0.0976562 
0.0488281 
0.0244141 
0.012207 
0.00610352 
0.00305176 
0.00152588 
0.000762939 
0.00038147 
0.000190735 

바이너리 변환 진 후 :

1.4013e-452.8026e-454.2039e-458.40779e-451.68156e-443.50325e-447.00649e-441.4013e-432.8026e-435.60519e-431.12104e-422.24208e-424.48416e-428.96831e-421.79366e-413.58732e-417.17465e-411.43493e-402.86986e-405.73972e-401.14794e-392.29589e-394.59177e-399.18355e-391.83671e-383.67342e-387.34684e-381.46937e-372.93874e-375 

은 어쩌면 일종의있다 등 해결 방법은 무엇입니까? 이에 대해

+0

이것은 C와 어떻게 관련이 있습니까? Swift에서 프로그래밍하는 경우 C가 어떻게 관련이 있습니까? –

+0

"(타사 라이브러리 및 Foundation이없는 자체 작성 코드)"...? 표준 라이브러리가 이미 필요한 것을 수행한다면 ... 왜 사용하지 않겠습니까? – Alexander

+0

분수 값을 이진수로 나타내시겠습니까? 위의 알고리즘을 캡처 할 수 없습니다. 나는 당신에게 구글 "바이너리 분수"를 제안 할 것이다. 간단한 알고리즘은 https://stackoverflow.com/a/4987217/1271826을 참조하십시오. 또는 http://floating-point-gui.de/formats/binary/를 참조하십시오. 또는 http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm을 참조하십시오. 이 작업을 수행 할 때 일부 10 진수 값은 한정된 2 진수 표현으로 표현 될 수 없으므로 특정 자릿수로 끝내기를 원할 수 있습니다. – Rob

답변

0

는 : func convertToBinary(dataName : dataType)

불행하게도, 나는 그것을 떠 소수를 변경하고있어 경우에하면 오류 메시지가 표시됩니다 : 당신의 코드에서
"Cannot assign value of type 'Float' to type 'Int'"

봐 ..

func convertToBinary(decimal: Int) -> String { 

함수 매개 변수의 데이터 유형은 제공된 입력 데이터 유형과 일치하도록 변경해야합니다.

func convertToBinary(decimal: Float) -> String { 

//your float (fraction) processing code 

} 

당신이 Int 또는 Float 두 유형의 입력 매개 변수를 원하는 경우, 함수를 호출

, 당신은 어떤 입력을 허용하는 와일드 카드 *를 사용하여 시도 할 수 있습니다. 의사 코드 예제를 참조하십시오 ...

func convertToBinary(decimal: *) -> String { 

//your Integer or Float processing code 
//consider using IF condition... 
//# if (decimal.type == Int) { ..do Integer stuff here.. } 
//# else if (decimal.type == Float) { ..do Float stuff here.. } 

} 
+0

@DanielDluzhnevsky 어떤 진전이 있습니까? 이게 당신의 문제를 해결 했나요? –

관련 문제