2011-03-04 54 views

回答

12

它使用vim內部查找/替換很可能可能的,但我會用 「perldo」:

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

我修改這個正則表達式來也使用負數和電子記號法:([ - ]?\ d + \。\ d +(e [+ - ] \ d)?) – Reimund 2016-04-25 23:13:05

10

只需使用VimL :

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

4

如果你只是想截斷最後一位,而不是四捨五入,

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

上述操作對我無效,但添加了幾個斜線修復了它... :%S/\(\ d \ + \ \ d \ d \)\ d \ +/\ 1 /克 – Charles 2013-03-12 19:38:25

1

根據前面的答案,使用VimL,負數和指數描述:

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