Vim 四舍五入/四舍五入至最接近的5

Vim 四舍五入/四舍五入至最接近的5,vim,numbers,rounding,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 但是,它给出了一个尾

我正试着把一系列数字凑到最接近的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
但是,它给出了一个尾随字符错误。
我做错了什么?

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

要将数字
n
四舍五入到
k
的最近倍数,可以执行以下操作:

(n + k/2) / k * k
综上所述,该命令可以是:

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

非常感谢。如果我只想将
四舍五入
或只想将
四舍五入
精确到最接近的5,你知道公式是什么吗?我一直在尝试,但找不到正确的公式。@Reman:你可以尝试将
(n+(k-1))/k*k
四舍五入,将
n/k*k
四舍五入。