sleepless_in_seattle
sleepless_in_seattle

Reputation: 2214

PHP printf function and it's weird behaviour

I'm baffled what these numbers mean. To me it seems that printf gives me wrong results.

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

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

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

First of all it seems to print too many decimals and I have no idea what those numbers are. Can someone shed some light on this matter?

Upvotes: 4

Views: 471

Answers (1)

Alma Do
Alma Do

Reputation: 37365

Simple. printf() has a return value, which is integer. And that value is - length of resulting string. Thus, your code is doing two things:

  • First, format & output your string with printf()
  • Second, echo() the result, which is the length for each string.

That is because you see 1.004 for first case, for example. It's 1.00 with 4 (and length of "1.00" string is 4)

If your intention is to print formatted string, either use printf() as it is:

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

Or use sprintf() with echo:

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

Upvotes: 5

Related Questions