Valore assoluto del numero

Ho ununica riga di numeri separati da uno spazio.

read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done 

Ho bisogno che il valore stampato sia un numero assoluto

Ho un altro problema che sto riscontrando. Il formato che sto cercando di ottenere un numero assoluto. Niente di quello che sto facendo funziona. Ho letto che

abs(){ number } 

dovrebbe darmi questo ma non sembra funzionare. Inoltre, se funziona, dove lo lavori nel ciclo?

Commenti

Risposta

Moltiplicando un numero qualsiasi per il suo segno verrà generato un numero positivo. Oppure, se si vuole il valore assoluto del numero. La funzione per il segno è molto semplice:

sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; } 

Il valore assoluto è quindi:

echo "$(( x * $(sign "$x") ))" 

Ovviamente, è molto più semplice rimuovere il segno negativo iniziale (se esiste) o, per completezza, qualsiasi + o - segno (se esiste) con spazi iniziali:

echo "${x##*[+-]}" # assuming x is an integer valid in the shell. 

Risposta

Se hai un numero intero negativo, puoi trattarlo come una stringa e rimuovere il trattino iniziale

x=-5 echo ${x#-}. # "5" 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *