bcで小数の比較をおこなう

[コマンドは整数同士しか比較しないので小数点を含む数があらわれるとたちまち「integer expression expected」というエラーに見舞われる。

図1. エラーに見舞われる様子

そうすると小数の比較を[コマンドでも可能にする工夫を凝らすか別の方法を模索しなければならない。暇を掛けずにやるならbcがらくちんである。bcにパイプで不等式を渡してやると関係を満たさないものは0、満たすものは1を返してくる。

$ echo '1.99 == 2.00' | bc
0
$ echo '2.00 != 2.00' | bc
0
$ echo '1.99 > 2.00' | bc
0
$ echo '1.99 >= 2.00' | bc
0

$ echo '2.00 == 2.00' | bc
1
$ echo '1.99 != 2.00' | bc
1
$ echo '1.99 < 2.00' | bc
1
$ echo '1.99 <= 2.00' | bc
1

bcをインストールできない環境であれば、cutコマンドでピリオドをデリミタとして指定し、整数部分と小数部分を分けたのちにそれぞれを比較するシェルスクリプトを拵えるのもよさそうである。

なおbcはbasic calculator或いはbench calculatorの略のようであるけれどもはっきりした出典は探し当てられなかった。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください