How do I change the decimal separator in the printf command in bash?
Use:
$ VAR=3,1415
$ echo ${VAR/,/.}
3.1415
or
$ VAR=${VAR/,/.}
$ echo $VAR
3.1415
Another example:
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
There are several local variables that control the localization of Cygwin (or of any bash shell, for that matter). You can see them along with their value using the locale
command. You should see something like this:
$ 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=
You can see the possible values of the variables by using locale -va
. They are all formatted like <language>_<nation>.UTF-8
. The UTF-8
part is optional.
In order to switch to "North American" float separation style, simply set LC_NUMERIC
to its American value:
$ export LC_NUMERIC="en_US.UTF-8"
Simply setting the variable LC_NUMERIC
as if it were a regular variable won't work. You need to use the export command.
You can put this in the header of your scripts, or you can make it permanent by adding it to your ~/.bashrc
or your ~/.bash_profile
file.
Hope this was helpful!
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