import re
def round_numbers_in_string(string, decimal_places):
# find all floating point numbers in the string
numbers = [float(x) for x in re.findall(r"[-+]?\d*\.\d+|\d+", string)]
# round the numbers to the desired decimal places
rounded_numbers = [round(x, decimal_places) for x in numbers]
# replace the original numbers with the rounded numbers in the string
for i, num in enumerate(numbers):
string = string.replace(str(num), str(rounded_numbers[i]))
return string
original_string = "The values in this string are 245.783634 and the other value is: 25.21694"
decimal_places = 2
rounded_string = round_numbers_in_string(original_string, decimal_places)
print(rounded_string)
输出:
The values in this string are 245.78 and the other value is: 25.22
def round_numbers_in_string(string):
# Find all numbers in the string
numbers = re.findall(r'\d+\.\d+', string)
for number in numbers:
# Round the number to 2 decimal places
rounded_number = round(float(number), 2)
# Replace the original number with the rounded number
string = string.replace(number, str(rounded_number))
return string
original_string = "The values in this string are 245.783634 and the other value is: 25.21694"
rounded_string = round_numbers_in_string(original_string)
print(rounded_string)
import re
s = "The values in this string are 245.783634 and the other value is: 25.21694"
n = 2
result = re.sub(r'\d+\.\d+', lambda m: format(float(m.group(0)), f'.{n}f'), s)
输出:
The values in this string are 245.78 and the other value is: 25.22
import re
def rounder(string, decimal_points):
fmt = f".{decimal_points}f"
return re.sub(r'\d+\.\d+', lambda x: f"{float(x.group()):{fmt}}", string)
text = "The values in this string are 245.783634 and the other value is: 25.21694"
print(rounder(text, 2))
输出:
The values in this string are 245.78 and the other value is: 25.22
6条答案
按热度按时间jqjz2hbq1#
你可以使用re module来查找字符串中的所有浮点数,然后使用round()函数将它们四舍五入到所需的小数位数。下面是一个例子来说明你如何做到这一点:
输出:
62lalag42#
下面是一个在Python中如何实现这一点的例子:
此脚本使用re模块查找字符串中与\d+.\d+模式匹配的所有数字,该模式对应于一个或多个数字,后跟句点,再后跟一个或多个数字。然后,脚本循环这些数字,并使用round将它们四舍五入到2个小数位最后,它使用str.replace()方法将字符串中的原始数字替换为舍入后的数字。
此脚本将输出:“此字符串中的值为245.78,另一个值为:二十五点二二吋
请注意,此脚本仅在字符串中的数字格式为x.yy时有效。如果格式不同,则需要相应地调整模式。
2jcobegt3#
你需要做的就是找到这些数字,四舍五入,然后替换它们,你可以使用正则表达式来找到它们,如果我们使用
re.sub()
,它可以把一个函数作为它的"替换"参数,这个参数可以进行四舍五入:输出:
这里我使用的是我能想到的最基本的正则表达式和舍入代码,你可以根据自己的需要改变它,例如检查数字是否有符号(正则表达式:
[-+]?
)和/或使用类似于decimal
模块的东西来更好地处理大的数字。bd1hkmkf4#
另一种使用regex的方法是:
输出:
nfzehxib5#
我不太清楚你想做什么。“在适当的位置舍入并返回它们”--你需要把值保存为变量以便以后使用吗?如果是这样,你可以考虑使用正则表达式(如上所述)从字符串中提取数字并把它们赋给变量。
但是,如果您只是希望能够动态地格式化数字,那么您看过f字符串吗?f-string
输出:
ddrv8njm6#
您可以简单地使用格式字符串
这是一个很老套的方法,但确实存在许多其他的解决方案。我在最近的一个项目中就是这么做的。