dongmin1166 2018-12-10 11:19
浏览 32
已采纳

fgetcsv错误地解释数字[关闭]

I have a problem when I read csv files that contain values like 886468000000, it gets parsed as 8,86468E+11, which is a huge problem for my app, because I need to parse and retain the number in original form.

I google around the documentation and found nothing, I also tried retypging the exponential string representation as float during parsing , but that does not work either, it returns 8, which is obviously incorrect.

  • 写回答

1条回答 默认 最新

  • duanniedang3946 2018-12-10 13:40
    关注

    After testing with PHP 7.2.8 x86 and x64 below are my observations.

    The reason that 8,86468E+11 is being converted to 8 is because of PHP's type-casting behavior when a comma is used instead of a period as the decimal separator. See below:

    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!
    

    The primary issue for you is that your decimal separator is a comma instead of a period so to remedy this you will need to make use of 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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算