Снижение точности чисел - regex vim - PullRequest
9 голосов
/ 05 марта 2011

Мое регулярное выражение довольно ржавое.Как можно использовать vim для изменения точности десятичного числа.

Например:

Изменение 30.2223221 8188.2121213212 на 30.22 8188.21

Ответы [ 4 ]

12 голосов
/ 05 марта 2011

Использование только VimL:

:%s/\d\+\.\d\+/\=printf('%.2f',str2float(submatch(0)))/g

12 голосов
/ 05 марта 2011

Вероятно, это возможно при использовании внутреннего поиска / замены vim, но я бы использовал "perldo":

:perldo s/(\d+\.\d+)/sprintf "%.2f", $1/eg
4 голосов
/ 05 марта 2011

Если вы хотите просто усечь последнюю цифру вместо округления,

:%s/(\d+\.\d\d)\d+/\1/g
1 голос
/ 02 декабря 2016

На основании предыдущих ответов, используя VimL, ​​для отрицательных чисел и экспоненциальной записи:

:%s/\c\v[-]=\d+\.\d+(e[+-]\d+)=/\=printf('%.2f',str2float(submatch(0)))/g
...