如何在python中对字符串中的数字进行舍入

h9a6wy2h  于 2023-01-19  发布在  Python
关注(0)|答案(6)|浏览(116)

我想在python中取一些字符串中的数字,四舍五入到**2个小数点,然后返回它们,例如:

"The values in this string are 245.783634 and the other value is: 25.21694"

我希望字符串为:

"The values in this string are 245.78 and the other value is: 25.22"
jqjz2hbq

jqjz2hbq1#

你可以使用re module来查找字符串中的所有浮点数,然后使用round()函数将它们四舍五入到所需的小数位数。下面是一个例子来说明你如何做到这一点:

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
62lalag4

62lalag42#

下面是一个在Python中如何实现这一点的例子:

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)

此脚本使用re模块查找字符串中与\d+.\d+模式匹配的所有数字,该模式对应于一个或多个数字,后跟句点,再后跟一个或多个数字。然后,脚本循环这些数字,并使用round将它们四舍五入到2个小数位最后,它使用str.replace()方法将字符串中的原始数字替换为舍入后的数字。
此脚本将输出:“此字符串中的值为245.78,另一个值为:二十五点二二吋
请注意,此脚本仅在字符串中的数字格式为x.yy时有效。如果格式不同,则需要相应地调整模式。

2jcobegt

2jcobegt3#

你需要做的就是找到这些数字,四舍五入,然后替换它们,你可以使用正则表达式来找到它们,如果我们使用re.sub(),它可以把一个函数作为它的"替换"参数,这个参数可以进行四舍五入:

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

这里我使用的是我能想到的最基本的正则表达式和舍入代码,你可以根据自己的需要改变它,例如检查数字是否有符号(正则表达式:[-+]?)和/或使用类似于decimal模块的东西来更好地处理大的数字。

bd1hkmkf

bd1hkmkf4#

另一种使用regex的方法是:

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
nfzehxib

nfzehxib5#

我不太清楚你想做什么。“在适当的位置舍入并返回它们”--你需要把值保存为变量以便以后使用吗?如果是这样,你可以考虑使用正则表达式(如上所述)从字符串中提取数字并把它们赋给变量。
但是,如果您只是希望能够动态地格式化数字,那么您看过f字符串吗?f-string

print(f"The values in this string are {245.783634:.2f} and the other value is: {25.21694:.2f}.")

输出:

The values in this string are 245.78 and the other value is: 25.22.
ddrv8njm

ddrv8njm6#

您可以简单地使用格式字符串

link=f'{23.02313:.2f}'
print(link)

这是一个很老套的方法,但确实存在许多其他的解决方案。我在最近的一个项目中就是这么做的。

相关问题