如何将十进制(浮点数)转换为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 

也许有某种解决方法吗?

+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

对此: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有什么进展?这是否解决了你的问题? –