Я пытаюсь использовать функцию 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
Здесь что-то не так.
Таким образом, очевидно, что 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