PDA

Visualizza la versione completa : Inserimento Decimali su ShellScript


principe281179
01-10-2008, 10:09
Salve ragazzi

ho un problema, sto' effettuando un un programma in shell script, ma mi sono sbloccato

non riesco a far inserire i decimali ad una divisione ne tantomeno effettuare l'approssimazione per eccesso

cioè mi spiego;

$4 è il quarto parametro dello script

Num1=$4

Variabile1=$(echo "$Num1/30.0"|bc)

attualmente se lancio passo come $4=100

lui effettua la divisione ed estrae un valore pari a 3
anzichè riportarmi 33.3

Spero di essermi spiegato

Grazie

menphisx
01-10-2008, 10:25
Num1=$4
Variabile1=$(echo "$Num1/30.0"|bc -l)


Puoi anche usare il Perl:


Num1=$4
Variabile1=`echo "$Num1" | perl -e '$a = <STDIN>; print $a/3.0;'`


:ciauz:

principe281179
01-10-2008, 11:01
Scusami ho provato ad effettuare come dicevi usando il perl anche se non so' se di una macchina UNIX che utilizzo funzioni

il problema è che la divisione fatta 100/30.0
dove 100 è la variabile

restituisce 3
anzichè 3.33
ed eventuale arrotodamento a 4

conosci alternative?

menphisx
01-10-2008, 11:07
menphisx@dhcppc0:~$ echo "100.0/30.0" | bc
3
menphisx@dhcppc0:~$ echo "100.0/30.0" | bc -l
3.33333333333333333333
menphisx@dhcppc0:~$ echo "100.0" | perl -e '$a=<STDIN>; print $a/30.0; print "\n";'
3.33333333333333


:dottò:

principe281179
01-10-2008, 12:12
Grande menphisx

funziona!!!!!!
o almeno una parte

il problema e che se provo a mettere il tutto come una variabile mi dà di nuovo 3 anzichè 3.33333

variabile=$(echo "100.0" | perl -e '$a=<STDIN>; print $a/30.0; print "\n";')

ma poi come faccio ad arrotondare il 3.333333 in 4?

cmq grazie per l'aiuto stavo impazzendo a farlo

menphisx
01-10-2008, 13:08
menphisx@dhcppc0:~$ var1=`echo "100.0/30.0" | bc -l`
menphisx@dhcppc0:~$ echo $var1
3.33333333333333333333
menphisx@dhcppc0:~$ var1=`echo "100.0" | perl -e '$a=<STDIN>; print $a/30.0; print "\n";'`
menphisx@dhcppc0:~$ echo $var1
3.33333333333333


:stordita:

principe281179
01-10-2008, 13:37
non ci crederai stavo diventando matto...
a te funzionava a me no...mancava un apice non chiuso dopo il ";".... :dhò:

Ma sai come fare un arrotondamento del numero?

menphisx
02-10-2008, 03:47
#perl
menphisx@dhcppc0:~$ echo "100.0" | perl -e 'use POSIX qw(ceil); $a=<STDIN>; print ceil($a/30.0); print "\n";'
4
#bc
menphisx@dhcppc0:~$ ceil="define ceil(x){ z=scale; scale=0; x /= 1; x += 1; scale=z; return(x) }"
menphisx@dhcppc0:~$ echo "$ceil; ceil(100/30)" | bc -l
4


:madai!?:

principe281179
03-10-2008, 20:34
Grazie menphisx

sono riuscito grazie a te ad ultimare lo script

Ciao... :ciauz: :ciauz:

menphisx
03-10-2008, 22:23
Prego, è stato un piacere :D

Loading