24

私はCygwinのイタリア語ローカリゼーションを使用しているため、printfコマンドはカンマを使用してフロートを区切り、ドットで区切られたフロートを理解しません。

$ printf "%f" 3.1415
-bash: printf: 3.1415: invalid number
0,000000

$ printf "%f" 3,1415
3,141500

基本的に他のすべては10進数を区切るためにドットを使用するため、これはいくつかの問題を引き起こします。

小数点をカンマからドットに変更するにはどうすればよいですか?

4

3 に答える 3

25

Cygwin(またはbashシェル)のローカリゼーションを制御するローカル変数がいくつかあります。コマンドを使用して、それらを値とともに表示できますlocale。次のように表示されます。

$ locale
LANG=it_IT.UTF-8
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_ALL=

を使用すると、変数の可能な値を確認できますlocale -va。それらはすべてのようにフォーマットされてい<language>_<nation>.UTF-8ます。UTF-8パーツはオプションです。

「北米」のフロート分離スタイルに切り替えるには、単にLC_NUMERICそのアメリカの値に設定します。

$ export LC_NUMERIC="en_US.UTF-8"

通常の変数であるかのように変数を設定するだけLC_NUMERICでは機能しません。exportコマンドを使用する必要があります。

これをスクリプトのヘッダーに配置することも、ファイルに追加して永続的にすることもでき~/.bashrcます~/.bash_profile

これがお役に立てば幸いです。

于 2012-10-11T17:53:54.980 に答える
11

If you don't want to mess with system configuration, you can respect your locale but make sure your script uses dots for decimals with:

$ printf "%f" 3.5
-bash: printf: 3,5: invalid number
0.000000

$ LANG=C printf "%f" 3.5
3.500000
于 2016-01-12T11:22:18.173 に答える