2011-02-06 2 views
5

Я ищу регулярное выражение для удаления конечных нулей из десятичных чисел. Она должна возвращать следующие результаты:Ruby Regex to round trailing zeros

0.0002300 -> 0.00023 
10.002300 -> 10.0023 
100.0  -> 100 
1000  -> 1000 
0.0  -> 0 
0   -> 0 

В принципе, он должен удалить конечные нули и конечные десятичную точку, если дробная часть равна 0. Она также должна возвращать 0, когда это значение. Есть предположения? Благодарю.

ответ

8

Попробуйте регулярное выражение:

(?:(\..*[^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" 
} 

, который производит тот же результат.

+1

Я думаю, что это намного сложнее, чем это должно быть, но это работает так +1. –

+0

:), я полностью согласен @Mark. Я немного поглядел на него, но не вижу короткого выреза, хотя ... –

+0

Да, я не могу предложить более простое решение прямо сейчас ... Я сдаюсь. :) –

12

просто еще один способ

["100.0","0.00223000"].map{|x|"%g"%x} 
+0

Спасибо, это здорово! Ваше решение «% g»% x составляет всего 6 символов! – antinome