四舍五入至最接近的5

时间:2015-11-05 14:37:35

标签: vim numbers rounding

我试图将数字列表四舍五入到最接近的5和最接近的10。

示例:

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

但是,它会产生尾随字符错误。 我错了什么?

1 个答案:

答案 0 :(得分:2)

由于替换字符串中存在/作为除法运算符,因此需要为:s命令使用另一个分隔符。根据{{​​3}},这可以是任何其他单字节字符,但不是字母数字字符,'\',''''或'|'。

要将数字n四舍五入到k的最接近的倍数,您可以这样做:

(n + k/2) / k * k

将这一切放在一起,命令可以是:

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