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" | bcExempelutskrifter - 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:
- GNU
bc-manual: https://www.gnu.org/software/bc/manual/html_mono/bc.html - Bash
printf-kommando: https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-printf - AWK användarguide (för avrundning och annan textbehandling): https://www.gnu.org/software/gawk/manual/gawk.html
- Mer Bash-matematik, skriptning och nummertrick: https://mywiki.wooledge.org/BashFAQ/022