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

PHPSpreadsheet读取CSV时如何将科学计数法转为普通数字

问题原因

核心问题分两层:

  • CSV是纯文本格式,不存储任何单元格格式配置。你在Excel里看到的科学计数法是Excel自动对长数字做的渲染,用默认配置读取CSV时,读取器会自动把符合数字规则的长字符串识别为浮点型,超过精度长度后自动转成科学计数法存储。
  • 你之前尝试的两个方案不生效的原因:
    • number_format() 处理的是PHP浮点型值,PHP对超过15位的整数没有精确表示能力,转成浮点时已经丢失了末尾精度,再格式化必然得到错误值。
    • 加载文件后再设置单元格格式码无效,是因为读取阶段源值已经被转成了科学计数法的浮点/字符串,后续改格式只能改变展示逻辑,无法找回已经丢失的原始长数字。
解决方案

按优先级尝试以下方案:

方案1:配置CSV读取器关闭自动类型转换,强制按原始字符串读值

替换原有读取代码为以下内容:

$upload_file = $_FILES['order_report']['name'];
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
// 关闭自动类型推断,所有值按原始文本读取
$reader->setReadDataOnly(true);
$reader->setInputEncoding('UTF-8');
$spreadsheet = $reader->load($_FILES['order_report']['tmp_name']);
// toArray第四个参数传false,禁止自动格式化单元格值,直接返回原始存储内容
$sheet = $spreadsheet->getActiveSheet()->toArray(null, true, false, false);

调整后读取到的订单ID会直接保留完整字符串格式,不会自动转成科学计数法。

方案2:如果现有CSV已经被存为科学计数法文本,用自定义函数还原

如果没法重新导出正确的CSV文件(导出前把订单ID列设为文本格式再存CSV是最稳妥的前置操作),可以用下面的函数把科学计数法字符串还原为完整数字:

/**
 * 将带千分位的科学计数法字符串还原为完整长数字
 */
function convertSciToFullNum(string $sciStr): string
{
    // 处理欧洲格式的千分位逗号,替换为小数点
    $sciStr = str_replace(',', '.', trim($sciStr));
    if (stripos($sciStr, 'e') === false) {
        return $sciStr;
    }
    // 拆分系数和指数
    [$coefficient, $exponent] = explode('e', strtolower($sciStr));
    $exponent = (int)$exponent;
    [$intPart, $decPart] = array_pad(explode('.', $coefficient), 2, '');
    
    $decimalLength = strlen($decPart);
    if ($exponent >= $decimalLength) {
        // 指数大于小数位,末尾补对应数量的0
        return $intPart . $decPart . str_repeat('0', $exponent - $decimalLength);
    }
    // 指数小于小数位,在对应位置插入小数点
    $result = $intPart . substr($decPart, 0, $exponent) . '.' . substr($decPart, $exponent);
    return rtrim(rtrim($result, '0'), '.');
}

// 调用示例
echo convertSciToFullNum($sheet[1][0]); // 输出777359539596902
注意事项
  • 后续导出CSV时,务必先将订单ID这类超过15位的长数字列设置为文本格式再执行导出,不要用常规格式存储,从源头上避免科学计数法丢精度的问题。
  • 处理这类长ID字段时,全程不要让PHP/读取器把值转成整数/浮点型,一律按字符串处理,彻底避免精度丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:30:42