bcコマンドを使います。
sudo apt install bc
bash の四則演算で小数点は消えます。
ええ、消えちゃうんですよ。めんどくさいことに、小数点を扱うのは、コツが居るみたいなんです。
1〜10の連番を作ってみる
takuya@~/Desktop$ for i in {1..10} ; do echo $((1*$i)) ; done 1 2 3 4 5 6 7 8 9 10
小数点を計算してみる
$i / 10 にして、0.1 から 1.0までの値を出すことにする、もちろん出来ない。
takuya@~/Desktop$ for i in {1..10} ; do echo $((1/$i)) ; done 1 0 0 0 0 0 0 0 0 0
出来ませんね。桁落ちします。
expr でもダメ。
$( ( 1 + 1 ) )
の他にexpr も記述できますがもちろんダメ。
takuya@~/Desktop$ for i in {1..10} ; do echo $( expr 1 / $i) ; done 1 0 0 0 0 0 0 0 0 0
小数点を扱うにはbcコマンドを使う。
bc コマンドを使う。
takuya@~/Desktop$ echo "1 + 0.1 " | bc 1.1
パイプで四則演算をbc コマンドに渡すと、小数点を含めた計算ができます。
でも、まだ使っちゃダメ。
ただ渡せばいいって話でもない。
「桁数を指定する」
慌てて使うと、以下のとおりの計算結果になってしまう。
takuya@~/Desktop$ echo "1 - 0.1 " | bc .9 takuya@~/Desktop$ echo "1 / 0.1 " | bc 10 takuya@~/Desktop$ echo "1 / 10 " | bc 0
桁数をきっちり指定しないと、期待通りの結果が得られません。
計算結果の小数点以下桁数を指定する。
小数点以下の桁数を指定する
takuya@~/Desktop$ echo "scale=2; 1 / 10 " | bc .10
ちょっち調べたけど、 0.1 のように 10の位を0で埋める方法は分からなかった。計算するだけなら不要、printf しろってことみたい。
bc を使う。
それでは、scale を含めて計算をしてみましょう。
takuya@~/Desktop$ for i in {1..10} ; do echo "scale=1; 1 + $i / 10 " | bc ; done 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0