user2326650
user2326650

Reputation: 21

How to hide or delete the zero in my bash script?

This is my script:

echo -n "number 1 :";
read bil1
echo -n "number 2 :";
read bil2
multiple=$(echo $bil1*$bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0./');
echo " Your result : $bil1 * $bil2 = $multiple ";

If I input 9.5 for $bil1 and 300 for $bil2, the result is 2850.0.

I want the result:

Your result : 9.5 * 300 = 2850

How do I hide or delete the zero at the end of the result? I.e. show only 2850 ?

Upvotes: 1

Views: 107

Answers (3)

chepner
chepner

Reputation: 532053

Assign the normal, floating-point output of bc to the variable, then trim it using parameter expansion:

multiple=$(echo "$bil1*$bil2" | bc -l)
# Not POSIX, unfortunately
shopt -s extglob
multiple=${multiple%.+(0)}
echo " Your result : $bil1 * $bil2 = $multiple "

A POSIX solution is to let printf do the work

multiple=$(echo "$bil1*$bil2" | bc -l)
printf " Your result : %1.1f * %d = %1.0f\n" $bil1 $bil2 $multiple 

Upvotes: 1

glenn jackman
glenn jackman

Reputation: 247062

use bash's builtin printf to control the output

$ bil1=9.5; bil2=300; printf "%.0f\n" $(bc -l <<< "$bil1 * $bil2")
2850

Upvotes: 1

Uwe
Uwe

Reputation: 728

Add the following part to your sed command (at the end):

-e 's/\.0*$//'

(Delete a dot followed by arbitrarily many zeroes at the end by nothing.)

By the way, you better replace echo $bil1*$bil2 by echo "$bil1*$bil2", otherwise you may get strange effects depending on the contents of the current directory.

Upvotes: 2

Related Questions