将数字范围内的数字四舍五入

Rounding Up Numbers in Number Range

我想弄清楚如何处理我收到的号码范围的变化。我已经从数据帧中编译了它们,并试图以 100-200 / 200-300 / 300-400 格式获取所有范围。

有时会输入 300.400 而不是 300-400,有时会输入 300.5-400.5。如果可能的话,我还想解释一下输入为 300.5.400.5 的情况,因为尽管这很疯狂,但有人可能会这样做。我想我应该尝试计划在它们之间出现的任何不是“-”的字符。

简而言之,我想用小数舍入数字并替换非“-”字符分隔范围而不替换小数点。

请原谅我糟糕的代码:

num_range = [p.replace(' ', '') for p in num_dirty]
num_range = [p.replace(';', ' ') for p in num_dirty]
num_range = [p.replace('.', '-') for p in num_dirty]

num_clean = []

for r in num_dirty:
    num_clean.append(r.split('/'))

num_clean = list(itertools.chain.from_iterable(num_clean))

num_clean = ','.join(num_clean)

我也在使用我在此处找到的这个函数来列出频率范围内的所有数字,以便我可以删除任何重复的范围:

num_lines = num_clean.split(',')
num_numbers = []
i = 0
for line in num_lines:
    if line == '':
        continue
    elif '-' in line:
        t = line.split('-')
        num_numbers += range(int(t[0]), int(t[1]) + 1)
    else:
        num_numbers.append(int(line))

谢谢!

我运行你post

前两段的正则表达式
import re
from math import ceil

pat = re.compile(r'(\d+(?:\.\d+)?)\D(\d+(?:\.\d+)?)')
l = [(ceil(float(a)), ceil(float(b))) for a, b in pat.findall(your_post)]
print(l)
# [(100, 200), (200, 300), (300, 400), (300, 400), (300, 400), (301, 401), (301, 401)]

从那里你可以生成你想要的格式化字符串

for pair in l:
    print("{}-{}".format(*pair))