округление — с плавающей точкой ‘error’ — php 64bit

Используя следующий код:

<?php
$balance = (float)255744.12340511001247912645339965820312;
print_r($balance);
?>

На 32-битной машине я получаю:

255744.12340511

На 64-битной машине я получаю.

255744.123405

Я (почти) уверен, что это не имеет ничего общего с 32-битной или 64-битной машиной, а скорее, что это где-то настройка.
Я также не думаю, что это проблема с плавающей запятой, а скорее проблема округления php.

Я хотел бы, чтобы моя точность была до 16 десятичных знаков.

Как я могу получить такой уровень точности?

0

Решение

Просто чтобы ответить на мой собственный вопрос, чтобы избежать путаницы, как правильно заметил Амаль Мурали:

в 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 );

Если у вас есть доступ к конфигурации, она может быть немного быстрее.

1

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

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

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