PHP Printf как плавающая точность

Я пытаюсь использовать функцию printf для печати пользовательской емкости. Полная формула выглядит примерно так:

 echo printf("%.02f", ($size/(1024*1024))) . " GB"; 

Учитывая, что $size == (10 * 1024 * 1024) , это должно распечатываться

10,00 ГБ

Но это не так. Он печатает 10.04 GB . Более того,

 echo printf("%.02f", 10) 

приводит к

10,04


Какие?! Предоставляя ему целое число для преобразования в float, он преобразует 10 в 10.00000009.

Как это можно исправить? Очевидно, что одним из решений было бы распечатать его как целое число, но значение не всегда будет целым числом; это может быть 5,57 ГБ, и в этом случае точность этого сценария очень важна.


И ммм …

 echo printf("%d", 10) 

приводит к

102

Здесь что-то не так.

Solutions Collecting From Web of "PHP Printf как плавающая точность"

Таким образом, очевидно, что printf не означает, что его можно отследить. Вообще.

Простое изменение экземпляров printf на sprintf исправило эту проблему.


Кроме того, удаление эха и просто запуск команды, поскольку printf("%.02f", 10) действительно делает печать 10.00 , однако следует отметить, что вы не можете добавлять строки для печати, как вы можете, с эхом.


Если вы спросите меня, PHP должен был вызвать синтаксическую ошибку, неожиданный T_FUNCTION или что-то еще, но я отвлекся.

Это глубоко, но я попытаюсь объяснить:

 echo printf("%d", 10) 

Когда echo вызывается с выражением, он сначала оценивает все параметры, а затем отображает их на экране.

При вызове echo printf() она выполняется, чтобы получить ее значение. Таким образом, этот результат в IMIDIATLY печатает «10» и строит значение результата функции, которая должна быть echo .

Возвращаемый printf («% d», 10) на самом деле равен 2, если вы проверяете документы, они возвращают длину строки результата.

Итак, на экране вы видите «10», «2»,

Вы действительно не должны использовать Print () и аналогичную функцию вместе с Echo .

PS Вот еще один камень:
echo 1. print(2) + 3; // результат: 214