Warum sprintf PHP nicht zuverlässig rund 5s?

Ich habe mich auf @ verlasssprintf('%0.1f', 2.25) === '2.3' aber es stellt sich heraus, dass es bei @ kom2.2!

In der Tat scheint es zufällig:

php > for ($j=0;$j<=10;$j++) { printf( "%s -> %0.1f\n",$j+ 0.05, $j+0.05); } 
0.05 -> 0.1 // Up, as expected
1.05 -> 1.1 // Up, as expected
2.05 -> 2.0 // Down!
3.05 -> 3.0 // Down!
4.05 -> 4.0 // Down!
5.05 -> 5.0 // Down!
6.05 -> 6.0 // Down!
7.05 -> 7.0 // Down!
8.05 -> 8.1 // Up, as expected
9.05 -> 9.1 // Up, as expected

Habe ich den Punkt komplett verpasst? Ich habe das Gefühl, dass ein Teppich unter mir weggezogen wird und dass alles, was ich in der Schule gelernt habe, falsch ist ...! Sicherlich sollte eine Funktion zum Runden von Zahlen dies konsequent tun? (Ich stelle fest, dassround($n, 1) funktioniert wie erwartet.)

Antworten auf die Frage(6)

Ihre Antwort auf die Frage