You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化字典项保留两位小数(逗号分隔)并修复TypeError报错

问题修复与格式化实现

错误原因分析

你遇到的TypeError是因为最后一行的格式化逻辑完全错误:

  • fruit_sums.items()返回的是字典键值对的迭代器,无法直接用"{:.2%}"进行格式化
  • {:.2%}是百分比格式化规则,和你需要的保留两位小数、逗号作为小数点分隔符的需求完全不符

解决方案

要实现需求,需要:

  1. 先对每个数值进行四舍五入,处理浮点数精度问题(比如3767.3999999999996)
  2. 将格式化后的字符串中的小数点替换为逗号
  3. 遍历字典键值对,逐个处理后拼接成结果

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:41:59