PHP读取字符串作为指数

问题描述 投票:1回答:1

我正在读取CSV文件以导入数据。我有一个列有一些自动生成的数字(文本和数字)。问题是在某些行中,我的脚本将值读为指数。 enter image description here

示例:58597E68被视为5.86E + 72

我需要它作为字符串读取而不是数字。仅当我在自动生成的数字的中间有字符(E)时才会出现此问题。

$feed = 'path-to-csv/import.csv';
    if (!file_exists($feed)) {
        //$feed = 'import.csv';
        exit('Cannot find the CSV file: ' . $feed);
    }
    $row=0;

    if (($handle = fopen($feed, 'r')) !== FALSE) {
        while (($data_csv_rows = fgetcsv($handle, 1000000, ',')) !== FALSE) {

            $row++;
            if ($row == 1) {
                continue;
            } // skipping header row
            echo "Row " . ($row-1) . "<br>";print_r($data_csv_rows);echo "<br><br>";
        }
    }
php codeigniter csv
1个回答
1
投票

问题不在于您的CSV,而在于生成CSV的原始软件(可能是Excel)。

CSV是一种简单的数据格式,当你发现像5.86E+72这样的东西就像在CSV数据中一样,现在修复它已经太晚了。

为了避免这种情况,请确保你export the data correct into CSV

一些PHP代码在字段中找到这种坏数据:

if (strpos($value, 'E+') !== FALSE) {
    preg_match('~E\+[0-9]+$~', $value, $preg_result);
        if (isset($preg_result[0])) {
            die('Probably wrong data found within "'.$value.'".');
        }
    }
}

在你的情况下it seems 58597E68转换为float(5.8597E+72)

至少与qazxsw poi我无法创造问题,请参阅qazxsw poi。

通过str_getcsv()它是正确的,因为没有“围绕这些数据,所以PHP试图确定这个数据的类型,如果它是强大的数值...所以一定要添加”围绕字符串。 https://3v4l.org/RZ1eA


更新:我无法重现您的用例! definitionPHP String to Numeric Conversion documentation58597E68成为"58597E68"它不是自动转换浮动!有关详细信息,请参阅str_getcsv()!我怀疑您提供给我们的数据或您的验证有问题。

© www.soinside.com 2019 - 2024. All rights reserved.