Я пытаюсь использовать PHP printf
функция, чтобы распечатать емкость хранилища пользователя. Полная формула выглядит примерно так:
echo printf("%.02f", ($size/(1024*1024))) . " GB";
При условии $size == (10 * 1024 * 1024)
, это должно распечатать
10,00 ГБ
Но это не так. Это печатает 10.04 GB
, Более того,
echo printf("%.02f", 10)
результаты в
10,04
Какие?! Давая ему целое число для преобразования в число с плавающей точкой, оно конвертирует 10 в 10.00000009.
Как это можно исправить? Очевидно, что одним из решений будет распечатать его как целое число, но значение не всегда будет целым числом; это может быть 5,57 ГБ, и в этом случае точность этого сценария очень важна.
И ммм …
echo printf("%d", 10)
результаты в
102
Что-то здесь не так.
Так видимо printf
не предназначен для повторения. Совсем.
Простое изменение экземпляров printf
в sprintf
исправил эту проблему.
Кроме того, убрав эхо, и просто запустив команду как printf("%.02f", 10)
действительно, печатает 10.00
Однако следует отметить, что вы не можете добавлять строки в printf, как вы можете с помощью echoing.
Если вы спросите меня, PHP должен был выдать синтаксическую ошибку, неожиданный T_FUNCTION или что-то еще, но я отступаю.
Это до глубины души, но я постараюсь объяснить:
echo printf("%d", 10)
когда echo
вызывается с выражением, сначала он оценивает все параметры, а затем отображает их на экране.
При звонке echo printf()
Функция … выполняется, чтобы получить его значение.
Таким образом, это приводит к немедленному выводу «10» и строковому значению результата функции, которая будет echo
-ed.
Возвращаемый printf («% d», 10) фактически равен 2, если вы проверите документы это возвращает длина строки результата.
Итак, на экране вы видите «10», «2»
Вы действительно не должны использовать Распечатать() и аналогичная функция вместе с эхо.
P.S
Вот еще одна жемчужина:
echo 1. print(2) + 3;
// результат: 214