Большое десятичное число
Как сказал человек ;
Для сжатия бесконечного числа действительных чисел в конечное число бит требуется приблизительное представление.
Однако я добился большого успеха, используя класс BigDecimal .Чтобы процитировать его вступление
Ruby предоставляет встроенную поддержку целочисленной арифметики произвольной точности.Например:
42 ** 13 -> 1265437718438866624512
BigDecimal предоставляет аналогичную поддержку для очень больших или очень точных чисел с плавающей запятой.
Возьмем один из ваших примеров;
>> x = BigDecimal.new('900.1')
=> #<BigDecimal:101113be8,'0.9001E3',8(8)>
>> x % 1
=> #<BigDecimal:10110b498,'0.1E0',4(16)>
>> y = x % 1
=> #<BigDecimal:101104760,'0.1E0',4(16)>
>> y.to_s
=> "0.1E0"
>> y.to_f
=> 0.1
Как видите, обеспечение достойной точности возможно, но требует немного усилий.