Используя следующий код:
<?php
$balance = (float)255744.12340511001247912645339965820312;
print_r($balance);
?>
На 32-битной машине я получаю:
255744.12340511
На 64-битной машине я получаю.
255744.123405
Я (почти) уверен, что это не имеет ничего общего с 32-битной или 64-битной машиной, а скорее, что это где-то настройка.
Я также не думаю, что это проблема с плавающей запятой, а скорее проблема округления php.
Я хотел бы, чтобы моя точность была до 16 десятичных знаков.
Как я могу получить такой уровень точности?
Просто чтобы ответить на мой собственный вопрос, чтобы избежать путаницы, как правильно заметил Амаль Мурали:
в INI-файле:
; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 32
; When floats & doubles are serialized store serialize_precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
serialize_precision = 32
Или прямо в вашем скрипте
ini_set('precision', 32);
ini_set( 'serialize_precision', 32 );
Если у вас есть доступ к конфигурации, она может быть немного быстрее.
Других решений пока нет …