2013-07-25 59 views
2

我想将浮点数更改为二进制形式,例如对于12.345。我得到了整数部分完成:红宝石中的二进制小数

(12.345).floor.to_s(2) #=> 1100 

为分数,但是,找不到最好的办法做到这一点。

我确实有办法,维基百科显示的方式是here,但这是一个非常长的过程:带有一些我想避免的临时变量的while循环。我想知道是否有更好的方法来在Ruby中完成它。

我想要得到的完整二进制形式是字符串形式的1100.011

回答

2

你可以乘以一个足够大的功率2(比如2 ** 10),然后将其转换为二进制,然后插入小数点。

(12.345 * 2 ** 10).to_i.to_s(2).insert(-(10 + 1), ".") 
# => => "1100.0101100001" 

顺便说一句,我不认为1100.011是正确的形式。

+0

你是对的,(1.100011)x 2^3是适当的形式。这看起来不错,谢谢你。 – TakaGoto