@ZhoZho

Почему Float PHP некорректно обрабатывает разряды выше E+15?

Имеем код
ini_set("precision",20);
$var='10799141199215210000';
print (float)$var; // 10799141199215210496

Вопрос: откуда на конце 0496 ?
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
PHP реализует float как IEEE 754 платформозависимого формата.

То есть в большинстве случаев есть 53 бита мантиссы, что где-то 14-16 значащих десятичных цифр (надо перечитывать стандарт, там ещё nan, infinite кодируется, не очень помню сколько бит непосредственно значение и в каких случаях). Просить из этого достать 20 цифр конечно можно и любой результат с одинаковыми первыми 53 битами будет абсолютно корректен. Потому что float by design приблизительное число.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы