с плавающей точкой — PHP Printf As Float Precision

Я пытаюсь использовать 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

Что-то здесь не так.

2

Решение

Так видимо printf не предназначен для повторения. Совсем.

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


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


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

0

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

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

echo printf("%d", 10)

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

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

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

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

Вы действительно не должны использовать Распечатать() и аналогичная функция вместе с эхо.

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

0

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