Windows標準の電卓アプリを意地でも使わない

仕事をしていて、時々ちょっとした計算をしたい場合があるのだけど、最近「プログラムを書く時みたいな感じで計算できないかなぁ」と考えるようになって、試しにWindows標準の電卓アプリを使わない生活をしている。

もちろん(?)コマンドプロンプトを活用。手元で標準の電卓以外に計算に使えそうなツールがUnix由来のものばかりだったのはお約束だ。

まずちょっとした計算をする場合。

一番最初に考えたのはexprを使うことだ。このexprはGnuWin32のCoreUtils由来のものだ。

$ expr 1 + 1
2

$ expr 5 - 10
-5

$ expr 6 "*" 3
18

$ expr 5040 + 3990 + 2310
11340

但しexprで除算すると小数点以下が切り捨てられてしまうようだ。数値を実数風に記述したら何とかなるかと考えて試してみたが、今度は数値が非数値だと判定されてしまい、処理できなかった。何とかできる方法があるのかもしれないが、元々「exprで実数を扱うのは無理じゃないかなぁ」と思っていたこともあり、何も調べていない。

$ expr 3 / 2
1

$ expr 3.0 / 2
expr: non-numeric argument

$ expr 3 / 2.0
expr: non-numeric argument

小数点以下が大事な場合はrubyperlワンライナーを書くのが手っ取り早い。rubyruby-mswin32、perlはActivePerlのバイナリだ。

$ ruby -e "p 3 / 2"
1

$ ruby -e "p 3.0 / 2"
1.5

$ perl -e "print 3 / 2"
1.5

perlでは演算対象の値を実数表現にしなくても結果が実数で出力された。ただこれが一般的な動作かどうかまでは調べていない。