it-swarm.com.de

Aufrunden der Float-Punktnummern bash

Ok, also versuche ich, eine Eingabe von 17.92857 aufzurunden, so dass sie eine Eingabe von 17.929 in bash erhält.

Mein Code ist bisher:

read input
echo "scale = 3; $input" | bc -l

Wenn ich dies jedoch verwende, wird es nicht aufgerundet, es gibt 17.928 zurück.

Kennt jemand eine Lösung dafür?

16
Quill

Falls input eine Zahl enthält, ist kein externer Befehl wie bc erforderlich. Sie können einfach printf verwenden:

printf "%.3f\n" "$input"

Edit: Falls es sich bei der Eingabe um eine Formel handelt, sollten Sie bc wie in einem der folgenden Befehle verwenden:

printf "%.3f\n" $(bc -l <<< "$input")
printf "%.3f\n" $(echo "$input" | bc -l)
21
Tim Zimmermann

Ein kleiner Trick besteht darin, 0.0005 zu Ihrer Eingabe hinzuzufügen. Auf diese Weise wird Ihre Nummer korrekt aufgerundet.

1
Ludovic Feltz

Sie können dazu eine Shell-Hilfsfunktion round ${FLOAT} ${PRECISION} schreiben:

#!/usr/bin/env bash

round() {
  printf "%.${2}f" "${1}"
}

PI=3.14159

round ${PI} 0
echo
round ${PI} 1
echo
round ${PI} 2
echo
round ${PI} 3
echo
round ${PI} 4
echo
round ${PI} 5
echo
round ${PI} 6
echo

# Outputs:
3
3.1
3.14
3.142
3.1416
3.14159
3.141590

# To store in a variable:
ROUND_PI=$(round ${PI} 3)
echo ${ROUND_PI}

# Outputs:
3.142
1
Zane Hooper