我想将浮动数字更改为二进制形式,例如12.345
。我完成了整数部分:
(12.345).floor.to_s(2) #=> 1100
然而,对于分数,找不到最佳方法。
我确实有办法,就像维基百科显示here的方式一样,但这是一个非常漫长的过程:一个带有一堆临时变量的while循环,我想避免它。我想知道在Ruby中是否有更好的方法来做到这一点。
我想要的完整二进制格式是字符串形式的1100.011
。
答案 0 :(得分:2)
您可以将其乘以足够大的2
(比如2 ** 10
),然后将其转换为二进制,然后重新插入小数点。
(12.345 * 2 ** 10).to_i.to_s(2).insert(-(10 + 1), ".")
# => => "1100.0101100001"
顺便说一句,我不认为1100.011
是正确的形式。