Преобразование: отрегулируйте вход, чтобы иметь необходимое количество нулей и поместите точку в желаемое положение:
convert = ->(num, prec, scale) {
num.rjust(prec + scale, '0').tap { |s| s[-scale...-scale] = '.' }
}
быстрый тест:
%w[0045790000000 000000045790000000].all? do |input|
'0000000457.90000000' == convert.(input, 10, 8)
end
#⇒ true
Хотите ли вы вывести из нее поплавок:
convert.('000000045790000000', 10, 8).to_f # or #to_d
#⇒ 457.9