Avrundning av tal

Bash:
Avrundning av tal

Hur man gör:

Här är det låga ner på avrundning i Bash:

# Avrunda neråt med 'floor' med bc
echo "scale=0; 3.49/1" | bc

# Avrunda uppåt med 'ceiling' med bc
echo "scale=0; 3.01/1" | bc -l

# Avrunda till närmaste hela med printf
printf "%.0f\n" 3.49

# Ett trick för att avrunda till närmaste hela med bc
echo "(3.49+0.5)/1" | bc

Exempelutskrifter - direkt från terminalens mun:

3  # Avrundat neråt (floor)
4  # Avrundat uppåt (ceiling)
3  # Avrundat till närmaste (med printf)
3  # Avrundat till närmaste (med bc)

Fördjupning

Förr i tiden, fanns det ingen bc eller printf i Bash-skript för att göra matematikmagi. Gamla rävar var tvungna att förlita sig på externa verktyg eller påhittiga omvägar. Nu låter bc dig göra precision matematik. Kom ihåg, bc avrundar inte som standard - det utför flooring. Scale-delen ställer in decimalpunktsaktionen.

Alternativ? Du kan använda awk för avrundning utan att byta till bc eller brottas med perl för tyngre matematikbehov. För den masochistiska, gå ren Bash med, låt oss säga, iterativ strängmanipulation - men varför?

När det gäller detaljer, gör bc inte bara avrundningar, det gör massor av mattegrejer - skala det, sinus det, sqrt det, du nämner det. Med printf handlar det mer om textformatering, men hej, det avrundar tal, så vi klagar inte.

Se även

För de som är sugna på mer: