我正在尋找一種簡單的方法來將浮點小數轉換爲二進制浮點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
等
也許有某種解決方法嗎?
這與C有什麼關係?如果您使用Swift進行編程,C如何相關? –
「(自行編寫的沒有第三方庫和基礎的代碼)」...?如果標準庫已經做了你所需要的......你爲什麼不使用它? – Alexander
您是否試圖用二進制表示小數值?上述算法無法捕捉到。我建議你谷歌「二進制分數」。有關簡單算法,請參閱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