我使用 Cygwin 的意大利语本地化,因此我的 printf 命令使用逗号分隔浮点数,并且无法理解点分隔浮点数
$ printf "%f" 3.1415
-bash: printf: 3.1415: invalid number
0,000000
$ printf "%f" 3,1415
3,141500
这引起了几个问题,因为基本上其他所有东西都使用点来分隔十进制数字。
如何将小数点分隔符从逗号更改为点?
有几个局部变量控制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=
您可以使用 locale -va
查看变量的可能值。它们的格式都像 <language>_<nation>.UTF-8
.UTF-8
部分是可选的。
为了切换到"北美"浮子分离样式,只需将其LC_NUMERIC
设置为其美国值:
$ export LC_NUMERIC="en_US.UTF-8"
简单地将变量LC_NUMERIC
设置为常规变量是行不通的。您需要使用导出命令。
您可以将其放在脚本的标题中,也可以通过将其添加到~/.bashrc
或~/.bash_profile
文件中来使其永久化。
希望这是有帮助的!
如果您不想弄乱系统配置,您可以尊重您的区域设置,但请确保您的脚本使用点表示小数:
$ printf "%f" 3.5
-bash: printf: 3,5: invalid number
0.000000
$ LANG=C printf "%f" 3.5
3.500000
使用:
$ VAR=3,1415
$ echo ${VAR/,/.}
3.1415
或
$ VAR=${VAR/,/.}
$ echo $VAR
3.1415
再比如:
VAR=$(echo "scale=1; $NUMBER/60" | bc)
VAR=${VAR/./,}
$ VAR=$(echo "scale=1; 150/60" | bc);echo $VAR
2.5
$ VAR=$(echo "scale=1; 150/60" | bc); VAR=${VAR/./,};echo $VAR
2,5