如何从Python游标对象提取数值?代码返回值处理求助
提取Decimal数值的解决方案
你的combiner()返回的结构是嵌套的列表和元组:外层是包含两个查询结果的列表,每个查询结果又是包含单条记录的列表,每条记录则是包含单个Decimal值的元组。要拿到你需要的数值,只需要逐层索引提取就行,给你两种实用的方法:
方法一:修改combiner直接返回目标值
如果希望combiner()直接给出你需要的数值,不用后续再处理,可以修改函数如下:
def combiner(): AverageBilling = data_generation() AverageGrossProfit = data_generation2() # 从第一个查询结果中提取第一行第一列的Decimal值 bill_rate = AverageBilling[0][0] # 从第二个查询结果中提取对应值 gross_profit = AverageGrossProfit[0][0] # 可以直接返回Decimal类型(适合财务精确计算),或者转成float/字符串 return [bill_rate, gross_profit] # 要是需要普通浮点数,就改成:return [float(bill_rate), float(gross_profit)]
这样调用combiner()就能直接得到[Decimal('3213.713766'), Decimal('7.041164')](或对应的float值),直接使用即可。
方法二:调用combiner后再提取数值
如果不想改动原函数,就在调用后通过索引逐层取值:
# 先获取combiner的返回结果 combined_data = combiner() # 提取账单费率:combined_data[0]是第一个查询的结果集,取第一个元组的第一个元素 average_bill_rate = combined_data[0][0][0] # 提取毛利率:combined_data[1]是第二个查询的结果集,同理取值 average_gross_profit = combined_data[1][0][0] # 按需转换类型:转字符串或浮点数 bill_rate_str = str(average_bill_rate) bill_rate_float = float(average_bill_rate)
小提示
Decimal类型是Python专门用于精确小数计算的类型,如果你处理的是财务相关的费率、利润值,建议保留Decimal类型,避免浮点数的精度丢失问题;如果只是用于展示或非精确计算,转成float或字符串就可以啦。
内容的提问来源于stack exchange,提问作者zzstar
相关产品推荐
相关产品推荐

