今日の一言
2011/07/22(Fri) キツネ耳なロボ巫女さんが出る漫画が読みたい。 [長年日記] 23:00現在曇 24℃
_ [プログラミング][Android][Windows][Linux][Ubuntu][Debian][FC][Java][GALAXY S]Androidアプリにも利用可能なJavaの関数電卓プログラム(文字列を数式に読み替えて計算するJavaクラス)
以前にJavaでAndroid用の電卓アプリを作ったので、一番のキモである『文字列を数式に読み替えて計算するクラス』を公開することにしました。
DLはこちら(http://akihiro-i.net/~akihiro-i/public_files/20110722_MyStringParser.zip)
Android関係の関数を含まないクラスのため、Androidアプリだけでなく、通常のCUIやGUIのJavaプログラムにも組み込むことが出来ます。
なお、権利云々をとやかく言う気はありませんが、以下の点にだけは目を通しておいてください。
・完全無料で使用していただけます。 ・使用に関しては自己責任でお願いします。 ・DLしたファイルをそのまま自分のものとして公開するのはやめてください。改良・修正したものであればOKです。 ・強制ではありませんが、引用元として本サイトを紹介していただけるとうれしいです。 ・周囲にある広告バナー経由でなにか買い物をしていただけると、私はかなりうれしいです。
文字列の数式への読み替え
一般的な数式の文法は大別すると以下の形でまとめられる。
1. 基本的には左から順に計算する 2. 括弧がない場合、先に乗除算を計算して、その後、加減算を行う 3. 括弧がある場合は、先に括弧の中を計算する。なお、括弧内の計算は上述の計算順序に従う
以上の文法を、再帰下降構文解析という手法を使ってプログラムのフローチャートに表したものが以下の図である。
※こちら(http://ruffnex.oc.to/kenji/src/0index.html)のCUI電卓プログラムを参考にさせていただきました。
これを基本とし、関数に関する処理を加えることで、文字列からの計算を行う。
基本的には、通常の四則演算のルールに従う。ただし、乗算記号 "*" の省略は不可とする。また、関数については、その引数を "()" を使って表現する。関数の計算については、基本的にJavaのMathクラスを使用する。
なお、計算をdoubleで行っているために、丸め誤差が生じることに注意すべし。必要であればBigDecimalで書き直すこと。
(たとえば、1.2と入力すると、1.2000000000000002と表示される等)
使用できる記号について
以下のものが使用可能です。
+ 加算 - 減算 * 乗算 / 除算 ^ 累乗 PI 円周率(Math クラスを使用) e 自然対数の底(Math クラスを使用) sin(x) xのサイン cos(x) xのコサイン tan(x) xのタンジェント asin(x) xのアークサイン acos(x) xのアークコサイン atan(x) xのアークタンジェント log(x) 底が10の対数関数 ln(x) 底がeの対数関数 sqrt(x) xの平方根 E: 指数表記
補足情報
・エラーメッセージにリソースバンドルを使っているため、(無意味に)国際化対応が可能です。
・テキストエディタでは.propertiesが文字化けしているように見えますが、Eclipseで表示するときちんと日本語で表示されます。
・Javadocを使うことで、MyStringParser.javaのドキュメントが作成できます。
・TestMyStringParser.javaは、MyStringParser.javaをテストするための、超てきとーなプログラムです。信用しないでください。