2011-03-04 20 views

Respuesta

12

Es probable que sea posible usando vim búsqueda interna/reemplazar, pero yo usaría "perldo":

:perldo s/(\d+\.\d+)/sprintf "%.2f", $1/eg 
+0

I modificado esta expresión regular para también trabajar con números negativos y e-notación: ([-]? \ d + \. \ d + (e [+ -] \ d)?) – Reimund

10

Utilizando sólo VIML :

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

4

Si lo que desea es truncar el último dígito en lugar de redondeo,

:%s/(\d+\.\d\d)\d+/\1/g 
+0

Lo anterior no funcionó para mí, pero agregar algunas barras lo corrige ... :% s/\ (\ d \ + \. \ d \ d \) \ d \ +/\ 1/g – Charles

1

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 
Cuestiones relacionadas