Если они уже являются жалами, вы можете использовать манипуляции со строками и полностью обойти числовые проблемы:
# There are, of course, all sorts of ways to do this.
def add_decimal(s)
pfx = [ '0.00', '0.0', '0.' ]
if(pfx[s.length])
s = pfx[s.length] + s
else
s = s.dup
s[-2, 0] = '.'
end
s
end
add_decimal('') # "0.00"
add_decimal('1') # "0.01"
add_decimal('12') # "0.12"
add_decimal('123') # "1.23"
add_decimal('1234') # "12.34"
add_decimal('12345') # "123.45"
Никаких проблем с точностью, ни плавающей запятой, ни bignums, ни Rational, ни хитрости, ни хитрости. Для работы с отрицательными значениями потребуются некоторые простые модификации, но это будет так же просто, как то, что уже есть.