2017-10-15 14 views
0

私は浮動小数点の浮動小数点をSwift 3の浮動小数点を使用してバイナリに変換する簡単な方法を探しています。たとえば、このコードは十進数を問題なくバイナリに変換します。Swift 3で小数点(浮動小数点付き)をバイナリに変換する方法は?

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 


} 

残念ながら、私はそれをfloatへの小数を変更していた場合は、エラーメッセージ を示し

c = n % 2 

私は変更していた場合は、変数「「int型を入力するタイプ 『フロート』の値を割り当てることができません」

さて、その後、私は「%」を変更:それは別のエラーメッセージ 「使用truncatingRemainderは、代わりに 『%』は使用できません」と表示さ浮くするC

すべてが機能しました。バイナリ変換に小数後

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

"(第三者図書館と財団のない自己記述コード)" ...?あなたが必要としているものを標準ライブラリがすでに持っているのであれば、なぜそれを使用しないでしょうか? – Alexander

+0

分数値をバイナリで表現しようとしていますか?上記のアルゴリズムはそれをキャプチャできません。私はあなたのGoogleバイナリ分数をお勧めします。簡単なアルゴリズムについては、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を参照してください。これを行う際には、有限バイナリ表現で表現できない小数点の値があることに注意してください。そのため、特定の桁数で上限を設定することをお勧めします。 – Rob

答えて

0

これについて:
"Cannot assign value of type 'Float' to type 'Int'"

あなたのコードを見..

func convertToBinary(decimal: Int) -> String { 
:私はそれはエラーメッセージを表示floatに小数を変更していた場合、残念ながら func convertToBinary(dataName : dataType)

関数パラメータのデータ型は、指定された入力のデータ型と一致するように変更する必要があります。

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どんな進歩ですか?これで問題は解決しましたか? –

関連する問題