首页 文章

fgetcsv错误地解释数字[暂停]

提问于
浏览
-4

我有一个问题,当我读取包含886468000000等值的csv文件时,它被解析为8,86468E 11,这对我的应用程序来说是个大问题,因为我需要解析并保留原始形式的数字 .

我在文档周围搜索并没有发现任何内容,我也尝试在解析期间将指数字符串表示重新格式化为float,但这也不起作用,它返回8,这显然是不正确的 .

1 回答

  • 0

    在使用PHP 7.2.8测试后,x86和x64是我的观察结果 .

    8,86468E+11 转换为 8 的原因是因为当使用逗号而不是句点作为小数分隔符时,PHP的类型转换行为 . 见下文:

    echo (float) '8,86468E+11'; // 8 wrong
    
    echo (float) 8,86468E+11; // 88646800000000000 still wrong but getting close
    
    echo (float) '8.86468E+11'; // 886468000000 success!
    
    echo (float) 8.86468E+11; // 886468000000 success!
    

    您的主要问题是您的小数点分隔符是逗号而不是句点,因此要解决此问题,您需要使用str_replace()

    $my_num_from_csv = '8,86468E+11';
    
    $my_num_from_csv = (float) str_replace( ',', '.', $my_num_from_csv );
    
    echo $my_num_from_csv; //886468000000
    

相关问题