Python 2.7.9中如何比较AWS账单提取的字符串小数数值
解决字符串小数数值比较的问题
我一眼就瞅出你代码里的问题了——你把top_answer = 0放在了for循环的内部!这就导致每处理一行新内容时,top_answer都会被重置回0,之前找到的最大值根本留不住,每次比较都是拿当前的小数和0比,自然没法正确追踪到所有数值里的最大值。
另外,你提取的字符串里可能带空格(比如示例里的' 1.46'),虽然Decimal()能自动忽略前后空格,但最好还是显式用strip()处理一下,避免潜在的格式问题。
修正后的代码示例
from decimal import * # 把最大值的初始化移到循环外面,确保不会被重置 top_answer = Decimal('0') # 若可能出现负数,用Decimal('-Infinity')更稳妥 for line in output.split('\n'): if "Maximum" in line: # 提取数值字符串并去除前后空白 ext = line.strip()[10:-1].strip() ans = Decimal(ext) print(f"当前提取值: {ext}, 当前最大值: {top_answer}") if ans > top_answer: top_answer = ans print(f"更新后最大值: {top_answer}")
额外优化建议
如果你的账单报告里可能出现负数(虽然Maximum对应的数值大概率是正数),把top_answer的初始值设为Decimal('-Infinity')会更严谨——这样哪怕所有提取的数值都是负数,也能正确找到最大的那个(最接近0的负数)。
比如改成:
top_answer = Decimal('-Infinity')
这样运行下来,就能正确追踪并比较所有从账单里提取的小数数值,找到最大的那个啦!
内容的提问来源于stack exchange,提问作者Grant Caley
相关产品推荐
相关产品推荐

