リンク:【ソース+水=麦茶色の何か】

以前にJavaでAndroid用の電卓アプリを作ったので、一番のキモである『文字列を数式に読み替えて計算するクラス』を公開することにしました。

DLはこちら もしくは下の添付からどうぞ。どちらも内容は同じです。

Android関係の関数を含まないクラスのため、Androidアプリだけでなく、通常のCUIやGUIのJavaプログラムにも組み込むことが出来ます。

なお、権利云々をとやかく言う気はありませんが、以下の点にだけは目を通しておいてください。

文字列の数式への読み替え

一般的な数式の文法は大別すると以下の形でまとめられる。

  1. 基本的には左から順に計算する
  2. 括弧がない場合、先に乗除算を計算して、その後、加減算を行う
  3. 括弧がある場合は、先に括弧の中を計算する。なお、括弧内の計算は上述の計算順序に従う

以上の文法を、再帰下降構文解析という手法を使ってプログラムのフローチャートに表したものが以下の図である。

RecursiveDescentParsing.png

※こちら(http://ruffnex.oc.to/kenji/src/0index.html)のCUI電卓プログラムを参考にさせていただきました。

これを基本とし、関数に関する処理を加えることで、文字列からの計算を行う。

基本的には、通常の四則演算のルールに従う。ただし、乗算記号 "*" の省略は不可とする。また、関数については、その引数を "()" を使って表現する。関数の計算については、基本的にJavaのMathクラスを使用する。

なお、計算をdoubleで行っているために、丸め誤差が生じることに注意すべし。必要であればBigDecimalで書き直すこと。

(たとえば、1.2と入力すると、1.2000000000000002と表示される等)

使用できる記号について

以下のものが使用可能です。

補足情報