Differences between revisions 2 and 14 (spanning 12 versions)
Revision 2 as of 2007-05-03 14:14:53
Size: 2069
Editor: GreyCat
Comment: expand, add examples, add links
Revision 14 as of 2008-11-25 04:50:13
Size: 210
Editor: c-71-60-46-204
Comment: Good day! You are the best! Im glad... hot sauce canning recipe I've just been sitting around waiting for something to happen. http://costcos64.hostil.pl/grand-pra3/map.html the good life recipe pet f
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[[Anchor(faq22)]]
== How can I calculate with floating point numbers instead of just integers? ==
["BASH"] does not have built-in floating point [:ArithmeticExpression:arithmetic]:

{{{
    $ echo $((10/3))
    3
}}}

Bash cannot do ''anything'' with floating point numbers, ''including'' compare them to each other(*). Instead, an external program must be used, e.g. {{{bc}}}, {{{awk}}} or {{{dc}}}:

{{{
    $ echo "scale=3; 10/3" | bc
    3.333
}}}

The "scale=3" command notifies {{{bc}}} that three digits of precision after the decimal point are required.

If you are trying to compare floating point numbers, be aware that a simple ''x < y'' is not supported by all versions of {{{bc}}}.

{{{
    # This would work with some versions, but not HP-UX 10.20:
    imadev:~$ bc <<< '1 < 2'
    syntax error on line 1,
}}}

Alternatively, you could use this:

{{{
    if [[ $(bc <<< "1.4 - 2.5") = -* ]]; then
        echo "1.4 is less than 2.5."
    fi
}}}

This example subtracts 2.5 from 1.4, and checks the sign of the result. If it is negative, the former number is less than the latter.

Portable version:

{{{
    case "`echo "1.4 - 2.5" | bc`" in
      -*) echo "1.4 is less than 2.5";;
    esac
}}}

["AWK"] can be used for calculations, too:

{{{
    $ awk 'BEGIN {printf "%.3f\n", 10 / 3}'
    3.333
}}}

There is a subtle but important difference between the {{{bc}}} and the {{{awk}}} solution here: {{{bc}}} reads commands and expressions from ''standard input''. {{{awk}}} on the other hand evaluates the expression as ''part of the program''. Expressions on standard input are ''not'' evaluated, i.e. {{{echo 10/3 | awk '{print $0}'}}} will print {{{10/3}}} instead of the evaluated result of the expression.

Newer versions of KornShell93 have built-in floating point arithmetic, together with mathematical functions like {{{sin()}}} or {{{cos()}}} .

(*)Actually, I lied. It can print them, using {{{printf}}} and one of the {{{%e}}} or {{{%f}}} or {{{%g}}} format strings. But that's all.
Good day! You are the best! Im glad... hot sauce canning recipe I've just been sitting around waiting for something to happen. http://costcos64.hostil.pl/grand-pra3/map.html the good life recipe pet food, ok

Good day! You are the best! Im glad... hot sauce canning recipe I've just been sitting around waiting for something to happen. http://costcos64.hostil.pl/grand-pra3/map.html the good life recipe pet food, ok

BashFAQ/022 (last edited 2021-09-01 06:31:58 by geirha)