PHP fputcsv显示科学记数法,而不是长整数



使用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进行操作。

最新更新