我正在编辑一个乳胶文件,其中一个表格中有太多小数位。如果我想将表格(或区域)中的所有数字四舍五入到十分之一或百分之一,我该怎么办?
我用Google搜索并找到了一些lisp函数,比如
(format "%0.2f" 1.2345)
(round 1.2)
等,但我不知道如何将它们应用于某个地区的所有数字。感谢。
答案 0 :(得分:7)
您可以执行此任务,而无需以交互方式query-replace-regexp
编写专用的Elisp函数:
C-米 - % [0-9]+\.[0-9]+
RET \,(format "%0.2f" \#&)
RET
替换文本中的\,(...)
表示插入调用带括号的Lisp表达式的结果,\#&
表示"无论整个模式匹配,转换为数字。&#34 ;
答案 1 :(得分:6)
对我而言,这是一个常见的用例:搜索区域中的某些内容并使用匹配的文本执行某些操作。
这里有一个有用的代码段:http://wikemacs.org/wiki/Emacs_Lisp_Cookbook#Scripted_Use
我只需要将匹配的字符串转换为带string-to-number
的int。
根据您的需要调整我的正则表达式。
这不是我最终的功能:
(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)))
)))))