printf
私のシステムではprintf (GNU coreutils) 8.26
、とにバンドルされているバージョンの2つの異なる実装をテストしていzsh 5.3.1
ます。半数がどのように丸められるか、つまり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
ここでは、どちらも明らかに半分に丸めています。しかし、小数点以下第1位までの丸めをテストすると、混乱が生じます。つまり、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
どちらの実装でも異なる方法で行われ、どちらにも明確なパターンはありません。これらの2つprintf
のsは、半分を小数点第1位に四捨五入する方法を教えてください。