sprintf 在 GNU Awk 3.1.5 和 GNU Awk 3.17 中的行为不同

sprintf behaves differently in GNU Awk 3.1.5 and GNU Awk 3.17

在 bash 终端中考虑以下命令:

echo 0.00027849383762390271 | awk '{print sprintf("%.20f",)}'

我连接到两台机器。

第一个有 GNU Bash 版本 4.15 和 GNU Awk 版本 3.1.7。上面的命令 returns 预期是什么:0.00027849383762390268(尽管最后两位数字与我的初始数字不同)

第二台机器有 GNU Bash 版本 3.2.39 和 GNU Awk 版本 3.1.5。上面的命令 returns : 0,00000000000000000000(逗号后有 20 个零)。请注意“,”而不是“。” .

为什么第二台机器的行为与第一台不同,如何使它的行为像第一台机器?

两台机器的语言环境不同。在执行这两个命令之前设置 LC_ALL=C(或您想要的任何语言环境)并查看 https://www.gnu.org/software/gawk/manual/html_node/Locale-influences-conversions.html 了解更多信息。