phpexcel读取不正确的十进制值
phpexcel reading incorrect decimal values
我在 excel sheet 中有一些值为 75.4
、66.8
,还有一些值为整数 24554
。在数据库中,我将列类型设置为 varchar(11)
。问题是一些十进制值显示正确,一些显示为 75.40000000000001
或 73.6
被读取为 73.59000000
。我有 2 个环境,一个本地 m/c 和一个工作区。在我的本地 m/c 它显示正确。所以,我不明白可能是什么问题。以下是我的代码
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$getValues = array();
for ($row = 4; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row); //gives the sheet values
if(!empty($rowData[0][0])){ //if row is null
// Insert row data array into database
$getValues[] = $this->getValuesModel($rowData, $data);
}
}
我怀疑可能有一些 php 配置设置,因为本地和服务器不同但不确定。请指导我完成此操作。
在深入研究之后,我得到了解决方案。我们可以执行以下两个选项之一:
- 问题不在于 phpexcel,而在于 excel sheet 中定义的单元格的
format
。它被赋予 General ,我将其更改为 Number 现在值与 excel sheet.
覆盖ini文件中的浮点数精度。 PHPExcel 修改精度,因此我们应该这样做:
$iniPrecision = ini_get('precision');
$objPHPExcel = PHPExcel_IOFactory::load($inputFilename);
ini_set('precision', $iniPrecision);
我在 excel sheet 中有一些值为 75.4
、66.8
,还有一些值为整数 24554
。在数据库中,我将列类型设置为 varchar(11)
。问题是一些十进制值显示正确,一些显示为 75.40000000000001
或 73.6
被读取为 73.59000000
。我有 2 个环境,一个本地 m/c 和一个工作区。在我的本地 m/c 它显示正确。所以,我不明白可能是什么问题。以下是我的代码
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$getValues = array();
for ($row = 4; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row); //gives the sheet values
if(!empty($rowData[0][0])){ //if row is null
// Insert row data array into database
$getValues[] = $this->getValuesModel($rowData, $data);
}
}
我怀疑可能有一些 php 配置设置,因为本地和服务器不同但不确定。请指导我完成此操作。
在深入研究之后,我得到了解决方案。我们可以执行以下两个选项之一:
- 问题不在于 phpexcel,而在于 excel sheet 中定义的单元格的
format
。它被赋予 General ,我将其更改为 Number 现在值与 excel sheet. 覆盖ini文件中的浮点数精度。 PHPExcel 修改精度,因此我们应该这样做:
$iniPrecision = ini_get('precision'); $objPHPExcel = PHPExcel_IOFactory::load($inputFilename); ini_set('precision', $iniPrecision);