如何将十进制(浮点数)转换为Swift 3中的二进制文件? (自编的代码没有第三方库和基础)
问题描述:
我正在寻找一种简单的方法来将浮点小数转换为二进制浮点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
等
也许有某种解决方法吗?
答
对此: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有什么进展?这是否解决了你的问题? –
这与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