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

Python如何将'2.6840000e+01'类科学计数法数据转换为常规数值格式

问题原因

你当前得到科学计数法格式的输出,核心原因是将所有处理后的值转为float类型存入numpy数组,numpy默认对浮点数的字符串表示会采用科学计数法,且你将二进制字符串转为float存储会丢失原本的字符串格式。同时你现有逻辑无需借助numpy矩阵存储,直接逐行处理写入文件即可大幅简化代码。

最简实现方案

你可以直接在读取每一行完成处理后,就按要求格式化写入目标文件,无需中间矩阵存储,代码如下:

# 假设你已经实现了以下三个工具函数,逻辑保持不变
def float_yuvarla(num):
    # 你的四舍五入逻辑,示例为保留2位小数,可替换为你自己的规则
    return round(num, 2)

def binary_decimal(bin_str):
    # 二进制转十进制逻辑
    return int(bin_str, 2)

def hexa_binary(hex_str):
    # 十六进制转二进制字符串,去掉前缀0b
    return bin(int(hex_str, 16))[2:]

# 主逻辑
with open("input.txt", "r") as in_f, open("fall.txt", "w") as out_f:
    for line in in_f:
        line = line.strip()
        # 只处理以1开头的行
        if not line.startswith("1"):
            continue
        cols = line.split()
        # 逐列处理
        col1 = cols[0] # 第一列保持不变
        col2 = float_yuvarla(float(cols[1])) # 第二列四舍五入
        col3 = binary_decimal(cols[2]) # 第三列二进制转十进制
        col4 = hexa_binary(cols[3]) # 第四列十六进制转二进制
        # 按要求格式化后写入文件
        out_line = f"{col1} {col2} {col3} {col4}\n"
        out_f.write(out_line)

如果你确实需要保留numpy矩阵存储的逻辑,只需要修改写入时的格式化方式即可,不要直接调用str(array1),而是逐行逐元素格式化:

# 原有逻辑生成array1后,替换写入部分的代码
with open("fall.txt","w") as ff:
    for row in array1:
        # 按要求格式化每一列
        col1 = int(row[0])
        col2 = round(row[1], 2)
        col3 = int(row[2])
        col4 = bin(int(row[3]))[2:]
        ff.write(f"{col1} {col2} {col3} {col4}\n")

科学计数法字符串转普通float的方法

你提到的'2.6840000e+01'这类字符串转普通float非常简单,直接调用float()即可转换:

s = '2.6840000e+01'
num = float(s)
print(num) # 输出26.84

如果需要输出的时候不显示科学计数法,格式化的时候指定小数位数即可,比如f"{num:.2f}"即可输出26.84。

内容的提问来源于stack exchange,提问作者anbvy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:06