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