Функция PHP printf и ее странное поведение

#php #integer #printf

#php #целое число #printf

Вопрос:

Я сбит с толку, что означают эти цифры. Мне кажется, что printf дает мне неправильные результаты.

 echo printf("%.2f", 1);
// 1.004

echo printf("%.3f", 1);
// 1.005

echo printf("%.2f", 1.1234);
// 1.124
  

Прежде всего, кажется, что печатается слишком много десятичных знаков, и я понятия не имею, что это за числа. Может кто-нибудь пролить свет на этот вопрос?

Ответ №1:

Просто. printf() имеет возвращаемое значение, которое является целым числом. И это значение — длина результирующей строки. Таким образом, ваш код выполняет две вещи:

  • Сначала отформатируйте и выведите свою строку с помощью printf()
  • Во-вторых, echo() результат, который является длиной для каждой строки.

Это потому, что вы видите 1.004 , например, для первого случая. Это 1.00 с 4 (и длина "1.00" строки равна 4 )

Если вы намерены распечатать форматированную строку, либо используйте printf() как есть:

 printf("%.2f", 1);
  

Или использовать sprintf() с echo:

 echo sprintf("%.2f", 1);