我正在编辑一个乳胶文件,其中一个表中有太多小数位.如果我想将表格(或区域)中的所有数字四舍五入到十分之一或百分之一,我该怎么办?
我用Google搜索并找到了一些lisp函数,比如
(format "%0.2f" 1.2345)
(round 1.2)
Run Code Online (Sandbox Code Playgroud)
等,但我不知道如何将它们应用于一个地区的所有数字.谢谢.
您可以执行此任务,而无需以query-replace-regexp交互方式编写专用的Elisp函数:
C-M-%[0-9]+\.[0-9]+RET\,(format "%0.2f" \#&)RET
的\,(...)在替换文本单元进行内插主叫括号Lisp的表达式的结果,并且\#&是指"无论整个图案匹配时,转换为数字".
对我而言,这是一个常见的用例:在区域中搜索某些内容并使用匹配的文本执行某些操作.
所以这里有一个有用的代码片段:http://wikemacs.org/wiki/Emacs_Lisp_Cookbook#Scripted_Use
我只需将匹配的字符串转换为int string-to-number.
根据您的需要调整我的正则表达式.
这不是我最终得到的功能:
(defun my-round-nb (start end)
"round the nb of the region."
(interactive "r")
(save-restriction
(narrow-to-region start end)
(goto-char 1)
(let ((case-fold-search nil))
(while (search-forward-regexp "\\([0-9]+\\.[0-9]+\\)" nil t)
(replace-match (format "%0.2f" (string-to-number (match-string 1)))
)))))
Run Code Online (Sandbox Code Playgroud)
我的文档:http://wikemacs.org/wiki/Category: Emacs_Lisp