Float array sum


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Float array sum
# 1  
Old 12-30-2013
Linux Float array sum

Hi everyone,

I'm having some trouble with float array.
When i try to get the array sum with float numbers i get this error line 39: soma + 2.34 | bc: syntax error: invalid arithmetic operator (error token is ".34 | bc")

Code:
 26 Somar() {
 27 echo "Quantos numeros deseja somar?"
 28 read numeros
 29 vetorSoma[$numeros]=" "
 30 for (( i=0;i<$numeros;i++ ))
 31 do
 32 con=$((con+1))
 33 echo -n "digite o $conš numero: "  
 34 read vetorSoma[$i]
 35 done
 36 
 37 for i in ${vetorSoma[@]}; do
 38 sum=0
 39 soma=$((soma + $i | bc))
 40 done
 41 echo "O resultado foi $soma"
 42 }

when i type int numbers it works great, i just don't know why.
Thx.
# 2  
Old 12-30-2013
You need to printf / echo a string including your numbers and the arithmetic operation (+ possibly other bc commands like "scale") and pipe that to bc.
# 3  
Old 12-30-2013
Quote:
Originally Posted by berveglieri
Hi everyone,

I'm having some trouble with float array.
When i try to get the array sum with float numbers i get this error line 39: soma + 2.34 | bc: syntax error: invalid arithmetic operator (error token is ".34 | bc")

Code:
 26 Somar() {
 27 echo "Quantos numeros deseja somar?"
 28 read numeros
 29 vetorSoma[$numeros]=" "
 30 for (( i=0;i<$numeros;i++ ))
 31 do
 32 con=$((con+1))
 33 echo -n "digite o $conš numero: "  
 34 read vetorSoma[$i]
 35 done
 36 
 37 for i in ${vetorSoma[@]}; do
 38 sum=0
 39 soma=$((soma + $i | bc))
 40 done
 41 echo "O resultado foi $soma"
 42 }

when i type int numbers it works great, i just don't know why.
Thx.
Your variable soma is not set initially, that will through some error, along with usage of bc as RudiC noticed.

Try :

Code:
Somar() { 
echo "Quantos numeros deseja somar?" 
read numeros 
vetorSoma[$numeros]=" " 
for (( i=0;i<$numeros;i++ )) 
do 
con=$((con+1)) 
echo -n "digite o $conš numero: " 
read vetorSoma[$i] 
done 

soma=0 
for i in ${vetorSoma[@]}; do 
soma=$(echo "scale=2;$soma + $i" | bc -l) 
done 
echo "O resultado foi $soma" 
} 

# call Somar
Somar

# 4  
Old 12-30-2013
Linux It's working perfectly now

Thx Mr RudiC and Mr Akshay Hegde.

Now i can store the float values and saw where i went wrong.

Thx.
# 5  
Old 12-30-2013
Note that if you use a 1993 or later ksh, you can just use something like:
Code:
soma=0
for i in ${vetorSoma[@]}; do
        soma=$((soma + $i))
done
printf "O resultado foi %.2f\n" "$soma"

Obviously, adjust the number in red above to set the number of digits you want displayed after the decimal point in your results.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help reading the array and sum of the array elements

Hi All, need help with reading the array and sum of the array elements. given an array of integers of size N . You need to print the sum of the elements in the array, keeping in mind that some of those integers may be quite large. Input Format The first line of the input consists of an... (1 Reply)
Discussion started by: nishantrefound
1 Replies

2. Shell Programming and Scripting

Help with Associative array to sum & Average

Hi All, I got stuck up with shell script where i use awk. The scenario which i am working on is as below. I have a file text.txt with contents COL1 COL2 COL3 COL4 1 A 500 200 1 B 500 300 2 A 290 150 2 B 290 140 3 C 100 100 I could able to sum col 3 and col4 based on col1 using... (1 Reply)
Discussion started by: imsularif
1 Replies

3. Shell Programming and Scripting

Using awk to find sum of an array

Hi I am really new to awk and using shell script but I am wondering if its possible to find the sum of an array? I looked online but most of the things there are confusing, and when I tried it on my own it kept giving me the value of the last entry into the array for the sum. I have an array... (2 Replies)
Discussion started by: razrnaga
2 Replies

4. UNIX for Dummies Questions & Answers

need [HELP] sum array multiple files

Hi.. I'm very newbie here.. I wonder if somebody can help me.. I have multiple directories with same out file name for each directories.. ./dirA/out.dat ./dirB/out.dat ./dirC/out.dat ..and so on.. for ./dirA/out.dat here is the structure content : for ./dirB/out.dat the same... (4 Replies)
Discussion started by: agiantz
4 Replies

5. Shell Programming and Scripting

need [HELP] sum array multiple files

Hi.. I'm very newbie here.. I wonder if somebody can help me.. I have multiple directories with same out file name for each directories.. ./dirA/out.dat ./dirB/out.dat ./dirC/out.dat ..and so on.. for ./dirA/out.dat here is the structure content : for ./dirB/out.dat the same... (6 Replies)
Discussion started by: agiantz
6 Replies

6. Shell Programming and Scripting

perl sum 2nd field in an array

Hi Everyone, ($total+=$_) for @record; assume @record=(1,2,3), so the result is 6. if @record=("1 3","2 3","3 3"), would like to sum up the 2nd field of this array, the result is 9. i tried " ($total+=$) for @record ", cannot, please advice. Thanks ---------- Post updated at 03:45... (1 Reply)
Discussion started by: jimmy_y
1 Replies

7. Solaris

can array store float point numbers

Hi all, I have doubt can array in a shell script can store floating point numbers. i have tired. but i unable to work it out. Please help me regarding this Thank U Naree (1 Reply)
Discussion started by: naree
1 Replies

8. Solaris

i cannot assign float point numbers to an array in solaris

total=0 declare -a sum limit=`iostat -En | grep -i size | awk '{print $2}' | sed -e 's/GB//g' | wc -l` echo "Limit is equal to $limit" ara="`iostat -En | grep -i size | awk '{print $2}' | sed -e 's/GB//g'`" for (( i=1; i<=$limit; i++ )) do sum=`echo $ara | cut -d " " -f $i` echo ${sum}... (11 Replies)
Discussion started by: naree
11 Replies

9. Programming

math.h: float ceilf(float x)

Good morning, I'm testing the use of ceilf: /*Filename: str.c*/ #include <stdio.h> #include <math.h> int main (void) { float ceilf(float x); int dev=3, result=0; float tmp = 3.444f; printf("Result: %f\n",ceilf(tmp)); return 0; } (1 Reply)
Discussion started by: jonas.gabriel
1 Replies
Login or Register to Ask a Question