红宝石中的二元分数

时间:2013-07-25 15:33:49

标签: ruby binary

我想将浮动数字更改为二进制形式,例如12.345。我完成了整数部分:

(12.345).floor.to_s(2) #=> 1100
然而,

对于分数,找不到最佳方法。

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

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

1 个答案:

答案 0 :(得分:2)

您可以将其乘以足够大的2(比如2 ** 10),然后将其转换为二进制,然后重新插入小数点。

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

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