では、17.92857
の入力を切り上げて、bashで17.929
の入力を取得できるようにします。
これまでの私のコードは:
read input
echo "scale = 3; $input" | bc -l
ただし、これを使用すると切り上げられず、17.928
が返されます。
誰かがこれに対する解決策を知っていますか?
input
に数値が含まれている場合、bc
のような外部コマンドは必要ありません。 printf
を使用するだけです。
printf "%.3f\n" "$input"
編集:ただし、入力が数式の場合は、次のいずれかのコマンドのようにbc
を使用する必要があります。
printf "%.3f\n" $(bc -l <<< "$input")
printf "%.3f\n" $(echo "$input" | bc -l)
Timの答えを拡張するには、シェルヘルパー関数round ${FLOAT} ${PRECISION}
を次のように記述します。
#!/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
少しトリックは、入力に0.0005
を追加することです。これにより、数値が正しく切り上げられます。