背景:
项目开发中经常使用fgetcsv()和fputcsv()函数高效导入导出Excel(csv)文件数据,但在使用fputcsv()函数导出Excel,遇到数值精度超出15位的列数据时,此列数据会将超出15位的值自定置为0,这是为什么?如何解决?
原因:
导出Excel/Csv文件时,列的数值精度为15位,超出15位后会自动置为0。
例如原始数据为:
[6708209641794310144,6708325755320795136,6708363343607894016,6709441113792450560]
导出CSV文件为:
解决方法:
业务处理结果转Excel文件时将数值项前后加制表符" "强制转化类型即可,如下:
//处理超出15位后重置0的数字->制表符的字符串 if (is_numeric($value) && strlen($value) > 15) { $value = " " . $value . " "; }