BCスケール丸め誤差

BCスケール丸め誤差

計算された値を切り捨てようとしましたが、bc設定するとscale=0計算全体がゼロを返します。この設定はscale=1正しい値である357.3を返しますが、scale=0常に0を返します。

以下は計算例です。

echo "scale=0; 3573 * (10 / 100)/1" | bc -l
0

echo "scale=1; 3573 * (10 / 100)/1" | bc -l
357.3

浮動小数点数を整数に切り捨てる正しい方法ではありませんかbc? bashスクリプトに整数として使用したいです。ありがとうございます!

答え1

作業順序を使用する追加出力:

echo "scale=0; 3573 * 10 / 100" | bc -l   # 357
echo "scale=0; 3573 / 100 * 10" | bc -l   # 350

答え2

使いawkやすくなると思います。

awk 'BEGIN { print int(3573 * (10/100)/1) }'
357

答え3

@Paul_Pedantの考えが正しいです。scale計算のすべての部分に適用されます。 10 / 100 = 0(サイズは0):

$ bc <<< 'scale = 0; 10 / 100'
0

したがって、全体の計算結果はゼロです。

答え4

使用printf:

$ LC_ALL=C printf "%.0f\n" $(echo "3573 * (10 / 100)/1" | bc -l)
357

関連情報