PHPExcel 意外的浮动行为
PHPExcel unexpected float behavior
我在我的一个项目中创建了一个新的 PHPExcel 对象,奇怪的是一些浮点函数在包含该库后的行为方式。
以round
函数为例,包含PHPExcel后不会舍入。
echo round(90.00 + 9.71, 2); // outputs 99.71
$sheet = new \PHPExcel();
$sheet->getProperties()
->setCreator('Bob')
->setTitle('Title');
echo round(90.00 + 9.71, 2); // outputs 99.7099999999
exit;
有办法解决这个问题吗?我尝试使用 setValueExplict
,但它说找不到 PHPExcel_Cell_DataType::TYPE_STRING
。
这归结为 PHPExcel 修改了其计算引擎中的 php.ini precision
设置。您可以自己覆盖它:
echo round(90.00 + 9.71, 2); // outputs 99.71
$savedPrecision = ini_get('precision');
$sheet = new \PHPExcel();
ini_set('precision', $savedPrecision);
echo round(90.00 + 9.71, 2); // outputs 99.71
或者,在回显浮点值时使用 sprintf() 或 number_format() 来获取要显示的小数位数
我在我的一个项目中创建了一个新的 PHPExcel 对象,奇怪的是一些浮点函数在包含该库后的行为方式。
以round
函数为例,包含PHPExcel后不会舍入。
echo round(90.00 + 9.71, 2); // outputs 99.71
$sheet = new \PHPExcel();
$sheet->getProperties()
->setCreator('Bob')
->setTitle('Title');
echo round(90.00 + 9.71, 2); // outputs 99.7099999999
exit;
有办法解决这个问题吗?我尝试使用 setValueExplict
,但它说找不到 PHPExcel_Cell_DataType::TYPE_STRING
。
这归结为 PHPExcel 修改了其计算引擎中的 php.ini precision
设置。您可以自己覆盖它:
echo round(90.00 + 9.71, 2); // outputs 99.71
$savedPrecision = ini_get('precision');
$sheet = new \PHPExcel();
ini_set('precision', $savedPrecision);
echo round(90.00 + 9.71, 2); // outputs 99.71
或者,在回显浮点值时使用 sprintf() 或 number_format() 来获取要显示的小数位数