Ich teste zwei verschiedene Implementierungen printf
auf meinem System: printf (GNU coreutils) 8.26
und die mitgelieferte Version zsh 5.3.1
. Ich teste, wie halbe Zahlen gerundet werden, dh für 1,5, 2,5, 3,5,… 9,5.
$ for i in {1..9}; do /usr/bin/printf '%.0f\n' "${i}.5"; done
2
2
4
4
6
6
8
8
10
$ for i in {1..9}; do printf '%.0f\n' "${i}.5"; done
2
2
4
4
6
6
8
8
10
Hier runden beide deutlich die Hälfte bis gerade ab . Wenn ich jedoch das Runden auf die erste Dezimalstelle teste, werden die Dinge verwirrend. Das heißt, ich teste auf 1.15, 1.25, 1.35,… 1.95.
$ for i in {1..9}; do /usr/bin/printf '%.1f\n' "1.${i}5"; done
1.1
1.2
1.4
1.5
1.5
1.6
1.8
1.9
2.0
$ for i in {1..9}; do printf '%.1f\n' "1.${i}5"; done
1.1
1.2
1.4
1.4
1.6
1.6
1.8
1.9
1.9
Beide Implementierungen machen es unterschiedlich, und ich kann auch kein klares Muster erkennen. Wie gehen diese beiden printf
runden Hälften auf die erste Dezimalstelle?