Differences between revisions 9 and 11 (spanning 2 versions)
Revision 9 as of 2008-11-24 00:52:53
Size: 2210
Editor: GreyCat
Comment: spam
Revision 11 as of 2008-11-24 12:33:16
Size: 507
Editor: 91
Comment: This is a cool site! Just a little anecdote I'd like to share with you, and another example of courage in the face of adversity chilli crab recipe So it goes. http://diamond79.kilu.de/recipef6d.html r
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.
    # The here string feature, inherited from rc->zsh->ksh93 was
    # introduced in bash 2.05b-alpha1
    imadev:~$ bc <<< '1 < 2'
    syntax error on line 1,
}}}

Alternatively, you could use this:

{{{
    # Bash
    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 first number is less than the second.

Portable version:

{{{
    # Bourne
    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 zsh and the KornShell 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.
This is a cool site! Just a little anecdote I'd like to share with you, and another example of courage in the face of adversity chilli crab recipe So it goes. http://diamond79.kilu.de/recipef6d.html recipes for people with ulcers , http://costcos64.007sites.com/recipe5c5.html grain free dog cookie recipes will, http://diamond79.kilu.de/recipe0fe.html mexican inspired outdoor kitchens experiment, http://diamond79.kilu.de/recipeda3.html recipes for drummettes, I just don't have much to say these days.

This is a cool site! Just a little anecdote I'd like to share with you, and another example of courage in the face of adversity chilli crab recipe So it goes. http://diamond79.kilu.de/recipef6d.html recipes for people with ulcers , http://costcos64.007sites.com/recipe5c5.html grain free dog cookie recipes will, http://diamond79.kilu.de/recipe0fe.html mexican inspired outdoor kitchens experiment, http://diamond79.kilu.de/recipeda3.html recipes for drummettes, I just don't have much to say these days.

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