Попробуйте регулярное выражение:
(?:(\..*[^0])0+|\.0+)$
и замените его на:
\1
Демо:
tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
print tst, " -> ", tst.sub(/(?:(\..*[^0])0+|\.0+)$/, '\1'), "\n"
}
, которое производит:
0.0002300 -> 0.00023
10.002300 -> 10.0023
100.0 -> 100
1000 -> 1000
0.0 -> 0
0 -> 0
Или вы можете просто сделать "%g" % tst
, чтобы сбросить конечные нули:
tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
s = "%g" % tst
print tst, " -> ", s, "\n"
}
, который выдает тот же результат.