使用正则表达式舍入

时间:2011-09-28 13:37:09

标签: regex decimal

是否可以使用正则表达式对数字进行舍入?问题是我在文件中有大量超过2位小数的数字,我需要将它们移动到2位小数。

它在源文件中,所以理想情况下我想使用Visual Studio的查找和替换,但我并不反对编写脚本来运行该文件(将其视为纯文本),如果正则表达式没有有答案。

4 个答案:

答案 0 :(得分:7)

你不能单独使用正则表达式,正如Ryan指出的那样,但你可以使用正则表达式在输入中查找小数,并在替换操作中使用回调函数。

在Python中:

>>> import re
>>> text = "1.234 and 99.999; .555 12.345"
>>> simpledec = re.compile(r"\d*\.\d+")
>>> def mround(match):
...     return "{:.2f}".format(float(match.group()))
...
>>> re.sub(simpledec, mround, text)
'1.23 and 100.00; 0.56 12.35'

匹配小数的正则表达式非常简单;例如,它与指数表示法不匹配,但它应该给你一个想法。

答案 1 :(得分:5)

我不认为你可以对数字进行舍入,因为正则表达式不能添加。

你可以按如下方式截断它们(这可以在Notepad ++中使用):

找到(\d*\.\d\d)\d*

替换为\1

答案 2 :(得分:3)

嗯......至少你可以搜索(\d+\.\d\d\d)\d*并将其替换为round($1, 2)

是的,也许这不是你所期望的那样:)

答案 3 :(得分:0)

我想出了一个简单的方法,可以在一组Google BigQuery结果中舍入结果 - 它们的SQL子集不会让你舍入到特定的小数位,但它确实支持正则表达式。< / p>

因为正如上面提到的那样,正则表达式无法添加,所以只要你能以某种方式为每个值添加一个常量,你仍然可以在那里得到剩余的部分:

+ 0.5 if you're rounding up to the nearest integer
+ 0.05 if you are rounding up to the nearest 0.1
+ 0.005 if you are rounding up to the nearest 0.01 etc.

...等 - 基本上加上最小精度值的一半以获得舍入效果。

然后对结果运行正则表达式提取。上述内容可能会为此完成。

这是我确定的正则表达式模式 - 这不是最强大的,但可以处理已知基本浮点格式的数字:

+ for 0.1 precision use (-?\d*\.?\d?)
+ for 0.01 precision use (-?\d*\.?\d?\d?)
+ for 0.001 precision use (-?\d*\.?\d?\d?\d?)

然后它舍入并截断。