【问题标题】:Reducing the precision of numbers - regex vim降低数字的精度 - 正则表达式 vim
【发布时间】:2011-07-09 03:07:28
【问题描述】:

我的正则表达式很生锈。 vim怎么能用来改变十进制数的精度。

例如:

变更 30.2223221 8188.2121213212 至 30.22 8188.21

【问题讨论】:

    标签: regex vim decimal precision


    【解决方案1】:

    可能使用 vim 内部搜索/替换,但我会使用“perldo”:

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

    【讨论】:

    • 我修改了这个正则表达式,使其也适用于负数和电子符号:([-]?\d+\.\d+(e[+-]\d​​)?)
    【解决方案2】:

    仅使用 VimL:

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

    【讨论】:

      【解决方案3】:

      如果您只想截断最后一位而不是四舍五入,

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

      【讨论】:

      • 以上对我不起作用,但添加一些斜杠可以解决它... :%s/(\d\+\.\d\d)\d\+/\1/ g
      【解决方案4】:

      基于之前的答案,使用 VimL,用于负数和指数符号:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        相关资源
        最近更新 更多