Ruby Regex в круглые конечные нули - PullRequest
5 голосов
/ 06 февраля 2011

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

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

По сути, он должен удалять конечные нули и конечную десятичную точку, если дробная часть равна 0. Он также должен возвращать 0, когда это значение. Какие-нибудь мысли? спасибо.

Ответы [ 2 ]

12 голосов
/ 06 февраля 2011

просто по-другому

["100.0","0.00223000"].map{|x|"%g"%x}
8 голосов
/ 06 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...