1

bash ターミナルで次のコマンドを検討してください。

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

2 台のマシンに接続しています。

1 つ目は、GNU Bash バージョン 4.15 と GNU Awk バージョン 3.1.7 です。上記のコマンドは、期待されるものを返します:0.00027849383762390268(ただし、最後の2桁は最初の番号とは異なります)

2 台目のマシンには、GNU Bash バージョン 3.2.39 と GNU Awk バージョン 3.1.5 が搭載されています。上記のコマンドは、0,00000000000000000000 (カンマの後に 20 個のゼロ) を返します。「.」の代わりに「,」に注意してください。.

2 台目のマシンが最初のマシンとは異なる動作をするのはなぜですか? また、最初のマシンのように動作させるにはどうすればよいですか?

4

1 に答える 1

3

2 つのマシン間でロケールが異なります。LC_ALL=C両方のコマンドを実行する前に (または任意のロケールを)設定し、詳細についてはhttps://www.gnu.org/software/gawk/manual/html_node/Locale-influences-conversions.htmlを参照してください。

于 2016-05-02T19:23:54.423 に答える