PHPExcel изменяет поведение округления на моем сервере — поиск предложений по отладке

У меня странная ошибка на моем сервере, когда создание экземпляра объекта PHPExcel приводит к тому, что идентичные операции округления возвращают разные результаты. Я ищу идеи, как я могу отладить это, чтобы я мог выбрать путь обновления для решения проблемы. Поиск в журналах изменений PHP не затрагивает проблему.

Рассмотрим следующий код:

include  'vendor/phpoffice/phpexcel/Classes/PHPExcel.php';

$old = round(0.6164,4);

$excel = new \PHPExcel();

$new = round(0.6164,4);
debug_zval_dump($old, $new);

Вот вывод на мой сервер (64-битный Linux):

$php -v
PHP 5.4.11 (cli) (built: Jan 16 2013 16:51:38)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
$ php test.php
string(6) "0.6164" refcount(2)
string(18) "0.6163999999999999" refcount(2)

Который я не могу воспроизвести на моей локальной машине (Win64):

$ php -v
PHP 5.4.11 (cli) (built: Jan 16 2013 20:26:43)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
$ php test.php
string(6) "0.6164" refcount(2)
string(6) "0.6164" refcount(2)

Я очень смущен этим поведением, поскольку такие детали низкого уровня должны быть абстрагированы, верно? Может кто-нибудь, знакомый с внутренними компонентами PHP, прокомментировать, что здесь происходит?

0

Решение

Механизм расчета PHPExcel изменил precision установка из php.ini, установка 12 в 32-битных системах, 16 в 64-битных системах, если оно определено как более низкое значение.

Этот параметр восстанавливается, когда объект PHPExcel не установлен

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]