我试图将数字列表四舍五入到最接近的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
但是,它会产生尾随字符错误。 我错了什么?
答案 0 :(得分:2)
由于替换字符串中存在/
作为除法运算符,因此需要为:s
命令使用另一个分隔符。根据{{3}},这可以是任何其他单字节字符,但不是字母数字字符,'\',''''或'|'。
要将数字n
四舍五入到k
的最接近的倍数,您可以这样做:
(n + k/2) / k * k
将这一切放在一起,命令可以是:
:%s!\v\d{4}!\=(submatch(0) + 2) / 5 * 5!