Absolutní hodnota čísla

Mám jeden řádek čísel oddělených mezerou.

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

Potřebuji, aby tištěná hodnota byla absolutní číslo

Mám ještě jeden problém, který dostávám. Formát, který se snažím získat absolutní číslo. Nic, co dělám, nefunguje. Četl jsem, že

abs(){ number } 

by mi to mělo dát, ale nezdá se, že by to fungovalo. Také pokud to funguje, kde to zapracujete do smyčky?

Komentáře

odpověď

Vynásobením libovolného čísla jeho znakem vygenerujete kladné číslo. Nebo pokud chcete absolutní hodnotu čísla. Funkce pro znaménko je velmi jednoduchá:

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

Absolutní hodnota je pak:

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

Samozřejmě je mnohem snazší odstranit úvodní záporné znaménko (pokud existuje) nebo pro úplnost libovolné + nebo - podepsat (pokud existuje) s úvodními mezerami:

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

odpovědět

Pokud máte záporné celé číslo, můžete s ním zacházet jako s řetězcem a odstranit úvodní pomlčku.

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *