使用fputcsv在csv中创建文件时,长整数以科学表示法显示。
示例-01332110000000140显示1.33211E+14
fputcsv($file, array('Id','DESTINATION_ACCOUNT','SOURCE_ACCOUNT'));
if(!empty($data)){
foreach($data as $key => $row){
fputcsv($file,[$row['ID']
$row['DESTINATION_ACCOUNT'], -- scientific notation instead of long integer
$row['SOURCE_ACCOUNT'] -- scientific notation instead of long integer
]
);
}
}
有很多数字的浮点会发生这种情况:
https://www.php.net/manual/en/language.types.integer.php
如果PHP遇到一个超出int类型界限的数字,它将应解释为浮点。此外,导致超出int类型界限的数字将返回浮点值相反(…(
$large_number = 9223372036854775808; var_dump($large_number); // float(9.2233720368548E+18)
echo gettype(1.33211E+14);
输出:double
。
如果执行printf('%d', '1.33211E+14');
、printf('%.0f', '1.33211E+14');
或echo (int)1.33211E+14;
,则会得到十进制表示。这种表述可能是错误的。
<?php
printf('%.0f', 66666666666666666);
输出:
66666666666666664
如果处理的数字大于PHP_MAX_INT
,最好将它们表示为字符串,并使用GMP进行操作。