Я не считаю, что это ошибка, я думаю, что это связано с тем, какую часть строки Ruby считает, когда вызывает to_f.
Ruby просматривает строку, начинающуюся слева, и любой символ 0-9, первый десятичный знак и следующие символы 0-9 будут соответствовать и пытаться преобразовать их в число с плавающей точкой. Все, что справа от этого, игнорируется.
Если ни один символ не соответствует этому критерию, возвращается 0.0.
https://apidock.com/ruby/String/to_f
Примеры:
>>'5.5'.to_f
=> 5.5
>>'5.5stuff'.to_f
=> 5.5
>>'5.stuff5'.to_f
=> 5.0
>>'5,5'.to_f
=> 5.0
>>'stuff5.5'.to_f
=> 0.0