我使用phpexcel讀取並導入一個CSV文件,其中一個單元格的長度爲18位數,如123456789123456789,儘管我使用的是ini_set("precision", "18");
,但我得到的值不正確。如何解決這個問題呢?phpexcel從單元格中讀取18位長數字
ini_set("precision", "20");
$objReader = PHPExcel_IOFactory::createReader('CSV')
->setDelimiter(',')
->setInputEncoding('GBK')
->setEnclosure('"')
->setLineEnding("\r\n")
->setSheetIndex(0);
$objPHPExcel = $objReader->load($file);
$worksheet = $objPHPExcel->getActiveSheet();
foreach ($worksheet->getRowIterator() as $row) {
echo 'Row number: ' . $row->getRowIndex() . "\r\n<br>";
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
foreach ($cellIterator as $cell) {
if (!is_null($cell)) {
echo 'Cell: ' . $cell->getCoordinate() . ' - ' . (string)$cell->getValue() . "\r\n<br>";
}
}
}
我的PHP服務器是64位的。問題是當單元格數爲123456789123456789,'$ cell-getValue );'返回123456789123456700,最後兩位數字不正確。 – Ron
更改您的區域設置。這聽起來像一個小數分隔符問題:一方面它是一個點,另一方面是一個逗號,所以數字被解釋爲錯誤。 – trincot
我將'setDelimiter(',')'改爲'setDelimiter('。')'。 Bingoooooooo,您的解決方案非常正確。這是一個可愛的答案。謝謝trincot。 – Ron