2015-11-05 150 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