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

Python中解决%f格式化输出自动截断浮点数及调整键值对打印分隔符的问题

解决浮点数输出截断与分隔符问题

针对你遇到的两个问题,我来一步步给你解决方案:

1. 让浮点数输出完整原始值

你用%f格式化时出现截断,是因为%f默认只保留6位小数并自动四舍五入。要输出未截断的原始浮点数,有几种靠谱的方式:

  • 用%s代替%f:%s会直接输出浮点数的字符串表示,不会做任何截断或舍入:
    print('%s,%s' %(ord_list[i][0], ord_list[i][1]))
    
  • 推荐用f-string(Python 3.6+):这是现在Python里最简洁直观的格式化方式,同样能输出浮点数的完整内容:
    print(f"{ord_list[i][0]},{ord_list[i][1]}")
    
  • 如果需要控制小数位数:要是你想保留较多小数位而非全部,可以指定足够长的位数,比如%.15f,不过要注意浮点数本身是二进制存储,可能存在微小的精度偏差:
    print('%s,%.15f' %(ord_list[i][0], ord_list[i][1]))
    

2. 把输出分隔符改成逗号(去掉空格)

你说直接打印键和平均值时出现空格,这是因为print(a, b)这种多参数写法会让Python自动用空格分隔参数。解决这个问题的关键是把两者合并成一个字符串再输出——上面的格式化写法已经帮你搞定了,不管是%s,%s还是f-string的{key},{value},都是把键和值拼接成带逗号的单个字符串,不会产生空格。

优化后的完整代码

另外,你的代码里有些冗余的地方可以简化,比如OrderedDict在Python 3.7+其实没必要用(普通字典已经默认有序),排序逻辑也能合并得更简洁。下面是调整后的代码,同时解决了你的两个问题:

import csv
from statistics import mean

with open('grades.txt', 'r') as f_handle:
    csv_reader = csv.reader(f_handle)
    # 一步完成字典构建和值的类型转换
    dct = {row[0]: [int(i) for i in row[1:]] for row in csv_reader}

# 计算平均值并直接排序,得到元组列表
sorted_items = sorted(
    [(key, mean(values)) for key, values in dct.items()],
    key=lambda x: x[1]
)

# 打印排序后的列表(可选,方便你查看)
print(sorted_items)

# 按要求格式化输出
for key, avg in sorted_items:
    # f-string实现逗号分隔+完整浮点数输出
    print(f"{key},{avg}")

这样运行后,你就能得到完整的浮点数输出,并且键和平均值之间只有逗号分隔啦。

内容的提问来源于stack exchange,提问作者Blame-it-on-me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:48:15