2

我想将浮点数更改为二进制形式,例如对于12.345. 我完成了整数部分:

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

然而,对于这一部分,找不到最好的方法来做到这一点。

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

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

4

1 回答 1

2

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

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

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

于 2013-07-25T15:49:14.730 回答