2017-10-15 111 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 


} 

不幸的是,如果我改變了小數漂浮它顯示錯誤消息 「無法分配型‘浮動’的價值鍵入‘詮釋’」

c = n % 2 

如果我改變變量C至浮動它示出了另一錯誤消息 「‘%’是不可用:使用truncatingRemainder代替」

好,然後我改變「%」與:

c = n.truncatingRemainder(dividingBy: 2) 

一切正常。不幸的是程序分十進制數無限(例如):

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

您是否試圖用二進制表示小數值?上述算法無法捕捉到。我建議你谷歌「二進制分數」。有關簡單算法,請參閱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

對此: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 

} 

當調用功能,如果你想要麼IntFloat類型的輸入參數,你可以嘗試使用通配符*接受任何輸入。請參閱僞代碼示例...

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有什麼進展?這是否解決了你的問題? –

相關問題