PHPSpreadsheet 和写入大量的小数位
PHPSpreadsheet and writing large numbers of decimal places
我在创建 XLSX 文件并尝试将大量小数位写入数值时遇到 PHPSpreadsheet 问题。
PHPSpreadsheet 正在四舍五入我的小数点后 14 位数字,但我需要它们完全按照显示的方式存储。
我正在按照 documentation 中的说明使用 setFormatCode('0.00000000000000')
,但它没有像我预期的那样工作。
这是我的测试代码:
<?php
require __DIR__ . '/vendor/autoload.php'; // Installed via composer
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$array = [
0.03790728347833,
1345.28748532874927,
121345.18248762894914, // all 14 DP
];
$format = '0.00000000000000'; // 14 DP
// write the data
$spreadsheet->getActiveSheet()
->fromArray($array, null, 'A1');
// Format the cells
$spreadsheet->getActiveSheet()->getStyle('A1:C1')->getNumberFormat()->setFormatCode($format);
// Column sizing
foreach(range('A','C') as $columnID)
{
$spreadsheet->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
}
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save("test.xlsx");
// A1 = 0.03790728347833 - same
// A2 = 1345.28748532870000 - rounded
// A3 = 121345.18248763000000 - rounded
谁能提供一种方法来存储这么多小数位而不四舍五入?
这似乎是 Excel 而不是 PHPSpreadsheet 的限制。
Excel 限制为 15 位有效数字 according to Wikipedia。
我在创建 XLSX 文件并尝试将大量小数位写入数值时遇到 PHPSpreadsheet 问题。
PHPSpreadsheet 正在四舍五入我的小数点后 14 位数字,但我需要它们完全按照显示的方式存储。
我正在按照 documentation 中的说明使用 setFormatCode('0.00000000000000')
,但它没有像我预期的那样工作。
这是我的测试代码:
<?php
require __DIR__ . '/vendor/autoload.php'; // Installed via composer
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$array = [
0.03790728347833,
1345.28748532874927,
121345.18248762894914, // all 14 DP
];
$format = '0.00000000000000'; // 14 DP
// write the data
$spreadsheet->getActiveSheet()
->fromArray($array, null, 'A1');
// Format the cells
$spreadsheet->getActiveSheet()->getStyle('A1:C1')->getNumberFormat()->setFormatCode($format);
// Column sizing
foreach(range('A','C') as $columnID)
{
$spreadsheet->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
}
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save("test.xlsx");
// A1 = 0.03790728347833 - same
// A2 = 1345.28748532870000 - rounded
// A3 = 121345.18248763000000 - rounded
谁能提供一种方法来存储这么多小数位而不四舍五入?
这似乎是 Excel 而不是 PHPSpreadsheet 的限制。
Excel 限制为 15 位有效数字 according to Wikipedia。