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?
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)
Ein kleiner Trick besteht darin, 0.0005
zu Ihrer Eingabe hinzuzufügen. Auf diese Weise wird Ihre Nummer korrekt aufgerundet.
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