fgetcsv错误地解释了数字

时间:2018-12-10 11:19:14

标签: php csv parsing fgetcsv

当我读取包含886468000000之类的csv文件时遇到问题,它被解析为8,86468E + 11,这对我的应用程序来说是个大问题,因为我需要解析并保留原始格式的数字。

我在文档中搜索了一下,却一无所获,我还尝试在解析过程中将指数型字符串表示形式重新键入为float,但这也不起作用,它返回8,这显然是错误的。

1 个答案:

答案 0 :(得分:1)

在使用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