我使用Cygwin的意大利语本地化,因此我的printf命令使用逗号分隔浮点数,并且不理解以点分隔的浮点数
$ printf "%f" 3.1415
-bash: printf: 3.1415: invalid number
0,000000
$ printf "%f" 3,1415
3,141500
Run Code Online (Sandbox Code Playgroud)
这会产生一些问题,因为基本上其他所有东西都使用点来分隔十进制数字.
如何将小数点分隔符从逗号更改为点?
Fer*_*isi 18
有几个局部变量可以控制cygwin(或任何bash shell)的本地化.您可以使用该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=
Run Code Online (Sandbox Code Playgroud)
您可以使用查看变量的可能值locale -va.它们的格式都是_.UTF-8.UTF-8是可选的.为了切换到北美浮动分离样式,只需将LC_NUMERIC设置为其美国值.
$ export LC_NUMERIC="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
只需将变量LC_NUMERIC设置为常规变量就不起作用,您需要使用export命令.
您可以将其放在脚本的标题中,也可以将其添加到您~/.bashrc或您的脚本中~/.bash_profile
希望这有用!
如果您不想搞乱系统配置,可以尊重您的语言环境,但要确保您的脚本使用小数点:
$ printf "%f" 3.5
-bash: printf: 3,5: invalid number
0.000000
$ LANG=C printf "%f" 3.5
3.500000
Run Code Online (Sandbox Code Playgroud)