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

Python写入CSV浮点数异常:大于1的浮点数被转为整数求助

解决Python写入CSV时浮点数莫名变整数的问题

嘿,我之前也踩过类似的CSV写入坑!你遇到的这种“小于1的数值能正常保留小数,大于1的浮点数却直接变成无小数点整数”的情况,大概率是网速数值的类型不对,或者格式藏着小问题——比如字符串格式的数值用了逗号当小数点,结果被CSV解析器(或是打开文件的Excel这类软件)误判了。

为啥会出这问题?

举个实际例子:如果你的downloadSpeed其实是字符串类型的"2,58795654"(用逗号代替点做小数点),而你设置的CSV分隔符又是分号;,那写入后用Excel打开时,Excel会默认把逗号当成千位分隔符直接忽略,自然就把它识别成整数258795654了。而小于1的"0.58795654"因为开头是0,软件不会乱解析,所以能正常显示小数。

给你几个靠谱的解决办法:

1. 先把数值转成浮点数再写入

不管你的原始数据是啥类型,先强制转成浮点数,确保写入的是标准浮点格式:

import csv
from datetime import datetime

# 假设date是你已经处理好的日期字符串
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
downloadSpeed = 2.58795654  # 也可以是从其他渠道获取的数值/字符串
uploadSpeed = 0.58795654

with open(data_file_path, 'a+', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=';')
    # 强制转换为浮点数,从根源杜绝格式问题
    writer.writerow([date, float(downloadSpeed), float(uploadSpeed)])

2. 格式化字符串,精确控制小数位数

如果需要固定保留几位小数,避免类型转换的意外,直接把数值格式化成字符串再写入:

with open(data_file_path, 'a+', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=';')
    # 保留8位小数,和你示例里的精度一致
    formatted_down = f"{downloadSpeed:.8f}"
    formatted_up = f"{uploadSpeed:.8f}"
    writer.writerow([date, formatted_down, formatted_up])

3. 检查数据源的格式

如果你的网速数值是从接口、日志或其他外部文件获取的,一定要确认原始格式!比如有些欧洲地区的数据源会用逗号当小数点,这时候得先替换成点:

# 比如原始数据是带逗号的字符串
raw_download_str = "2,58795654"
downloadSpeed = float(raw_download_str.replace(',', '.'))

怎么验证问题解决了?

别直接用Excel看!先打开记事本查看CSV文件内容,正确的行应该是这样的:

2024-05-20 15:00:00;2.58795654;0.58795654

如果没问题,再用Excel打开,导入的时候记得设置分隔符为分号,并且把网速列的格式设为“数值”,避免Excel自动乱解析。

内容的提问来源于stack exchange,提问作者Pablo Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:25:44