使用int(float(x))处理CSV价格数据时丢失小数位该如何解决?
解决方案
你对问题原因的判断完全正确,int(float(fields[4])) 这一步强制将带小数的价格转为整数,会直接截断所有小数部分,最终计算结果自然丢失小数精度。
修改步骤
- 去掉price字段多余的int强转,直接保留float类型即可
- 数量字段Qty如果确定是整数可保留int转换,避免非法输入导致计算错误
- 最终计算结果会自动保留浮点精度,如需固定小数位数可额外做格式化处理
修改后代码
def mapper(self, key, value): fields = value.split(",") name = fields[6] + " " + fields[7] Price = float(fields[4]) Qty = int(fields[5]) avgPrice = Price * Qty # 若需要强制保留两位小数,可取消下方注释 # avgPrice = round(avgPrice, 2) yield name, avgPrice
如果要求输出结果严格保留两位小数(比如整数结果需要展示为25.00),可直接返回格式化后的字符串:
yield name, f"{avgPrice:.2f}"
内容的提问来源于stack exchange,提问作者CKZ
相关产品推荐
相关产品推荐

