如何格式化字典项保留两位小数(逗号分隔)并修复TypeError报错
问题修复与格式化实现
错误原因分析
你遇到的TypeError是因为最后一行的格式化逻辑完全错误:
fruit_sums.items()返回的是字典键值对的迭代器,无法直接用"{:.2%}"进行格式化{:.2%}是百分比格式化规则,和你需要的保留两位小数、逗号作为小数点分隔符的需求完全不符
解决方案
要实现需求,需要:
- 先对每个数值进行四舍五入,处理浮点数精度问题(比如
3767.3999999999996) - 将格式化后的字符串中的小数点替换为逗号
- 遍历字典键值对,逐个处理后拼接成结果
修正后的代码
import openpyxl def load_excel_file(self, file_name): excelWorkbook = openpyxl.load_workbook(filename=file_name, data_only=True) return excelWorkbook def calulate_total_fruit_NorthMidSouth(self, file_name): sheet_factuur = self.load_excel_file(file_name)["Facturen "] fruit_sums = { "ananas": 0, "apple": 0, "waspeen": 0, } fruit_name_rows = { "ananas": [6, 7, 8], "apple": [9, 10, 11], "waspeen": [12, 13, 14], } array = [row for row in sheet_factuur.values] # 遍历Excel行(从1开始对应Excel行号) for row_num, row_values in enumerate(array, 1): for fruit in ["ananas", "apple", "waspeen"]: if row_num in fruit_name_rows[fruit]: # 累加第5列(索引4)的数值 fruit_sums[fruit] += row_values[4] # 处理每个水果的数值,格式化并替换小数点为逗号 formatted_lines = [] for fruit, total in fruit_sums.items(): # 四舍五入到两位小数,再替换小数点为逗号 formatted_total = "{:.2f}".format(total).replace('.', ',') formatted_lines.append(f"{fruit} {formatted_total}") return "\n".join(formatted_lines)
关键细节说明
"{:.2f}".format(total):将数值格式化为保留两位小数的字符串,自动处理3767.3999999999996这类精度问题,得到"3767.40".replace('.', ','):将格式化后的字符串中的小数点替换为逗号,得到"3767,40"- 遍历
fruit_sums.items()逐个处理键值对,避免了原代码中直接格式化迭代器的错误
内容的提问来源于stack exchange,提问作者mightycode Newton
相关产品推荐
相关产品推荐

