2015-11-05 157 views
2

我试图号码列表四舍五入到最接近的5和10附近四舍五入/关最近的5

例如:

1562 
1706 
1665 
1378 
1439 

我创造了这个代码围捕/断到最近的5:

:exe "%s/\\d\\d\\d\\d/\\=substitute(submatch(0).'\\.0', '.*', (round(submatch(0)/5)*5), 'g')/g" 

在替代的第一部分我想使从子匹配值加法.0到子匹配值是浮点数。

预期的结果:

1560 
1705 
1665 
1380 
1440 

然而,它提供了尾随字符错误。 我错了什么?

回答

2

由于/作为除法运算符存在于替换字符串中,因此需要使用:s命令的另一个分隔符。按照documentation,它可以是任何其它单字节字符,而不是字母数字字符,“\”,““'或‘|’。

为了圆一个数量nk你可以在最近的多这样做:

(n + k/2)/k * k 

把所有这些组合起来,该命令可以是:

:%s!\v\d{4}!\=(submatch(0) + 2)/5 * 5! 
+0

非常感谢你,你知道会是什么公式,如果我只是想'圆up'或只希望。到'四舍五入'到最近的5?我试图尝试但找不到合适的式。 – Reman

+1

@Reman:你可以尝试'(n +(k-1))/ k * k'四舍五入,'n/k * k'四舍五入。 –

+0

谢谢你的帮助 – Reman