Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

"Invalid Arithmetic Operator" when doing floating-point math in bash

Writer Andrew Mclaughlin

Here is my script:

d1=0.003
d2=0.0008
d1d2=$((d1 + d2))
mean1=7
mean2=5
meandiff=$((mean1 - mean2))
echo $meandiff
echo $d1d2

But instead of getting my intended output of:

0.0038
2

I am getting the error Invalid Arithmetic Operator, (error token is ".003")?

1

5 Answers

bash does not support floating-point arithmetic. You need to use an external utility like bc.

# Like everything else in shell, these are strings, not
# floating-point values
d1=0.003
d2=0.0008
# bc parses its input to perform math
d1d2=$(echo "$d1 + $d2" | bc)
# These, too, are strings (not integers)
mean1=7
mean2=5
# $((...)) is a built-in construct that can parse
# its contents as integers; valid identifiers
# are recursively resolved as variables.
meandiff=$((mean1 - mean2))
1

Another way to calculate floating numbers, is by using AWK rounding capability, for example:

a=502.709672592
b=501.627497268
echo "$a $b" | awk '{print $1 - $2}'
1.08218
3

In case you do not need floating point precision, you may simply strip off the decimal part.

echo $var | cut -d "." -f 1 | cut -d "," -f 1

cuts the integer part of the value. The reason to use cut twice is to parse integer part in case a regional setting may use dots to separate decimals and some others may use commas.

Edit:

Or, to automate the regional settings one may use locale.

echo $var | cut -d $(locale decimal_point) -f 1

3

You can change the shell which you are using. If you are executing your script with bash shell bash scriptname.sh try using ksh for your script execution. Bash doesn't support arithmetic operations that involve floating point numbers.

Big shout-out to the bc command - it totally saved my day! It's a simple answer, but it worked like a charm.

a=1.1
b=1.1
echo $a + $b | bc -l
# Output:
2.2
#SUM
sum=$(echo $a + $b | bc -l)
echo $sum
# Output
2.2

bc is a command-line calculator, which allows users to perform mathematical calculations on the terminal.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.