Mi expresión regular está bastante oxidada. ¿Cómo se podría usar vim para cambiar la precisión de un número decimal?Reducir la precisión de los números - regex vim
Por ejemplo:
Cambio 30.2223221 8.188,2121213212 a 30.22 8188.21
Mi expresión regular está bastante oxidada. ¿Cómo se podría usar vim para cambiar la precisión de un número decimal?Reducir la precisión de los números - regex vim
Por ejemplo:
Cambio 30.2223221 8.188,2121213212 a 30.22 8188.21
Es probable que sea posible usando vim búsqueda interna/reemplazar, pero yo usaría "perldo":
:perldo s/(\d+\.\d+)/sprintf "%.2f", $1/eg
Utilizando sólo VIML :
:%s/\d\+\.\d\+/\=printf('%.2f',str2float(submatch(0)))/g
Si lo que desea es truncar el último dígito en lugar de redondeo,
:%s/(\d+\.\d\d)\d+/\1/g
Lo anterior no funcionó para mí, pero agregar algunas barras lo corrige ... :% s/\ (\ d \ + \. \ d \ d \) \ d \ +/\ 1/g – Charles
Basado en las respuestas anteriores, utilizando VIML, para los números negativos y la notación exponencial:
:%s/\c\v[-]=\d+\.\d+(e[+-]\d+)=/\=printf('%.2f',str2float(submatch(0)))/g
I modificado esta expresión regular para también trabajar con números negativos y e-notación: ([-]? \ d + \. \ d + (e [+ -] \ d)?) – Reimund