文字列の数式を計算したい

タグの編集
投稿者 まさひと  (社会人) 投稿日時 2009/12/20 02:16:57
文字列の計算式を計算する方法はありますか?


String型で
50*20/4+12*10
のように指示している文字列を計算したいのですが・・・
何か良い方法はありますか?
投稿者 オショウ  (社会人) 投稿日時 2009/12/20 02:44:52
http://dobon.net/vb/dotnet/programing/eval.html

以上。参考まで
投稿者 cupid  (社会人) 投稿日時 2009/12/21 06:50:12
これは一種のコンパイラーコンパイラーのようなものですから簡単じゃないはずです。
誤った式が来る可能性もあります。例えば 10*(3+2-+25 の様にですね。

> 何か良い方法はありますか?

多分、無いですね。古典的には、プッシュダウン・スタックとかの手法があります。
高等数学では、「逆ポーランド法」を主張する一派もあるようですが、.....
投稿者 cupid  (社会人) 投稿日時 2009/12/21 07:13:47
思い出しました。Scriptを利用する方法はあるかもしれませんね。
abc.vbsというTextファイルを作って、中に下記を書いて置く。

dim atai
atai = (10 / 3) + 1.01
call msgbox(CStr(atai))

それで、abc.vbsをWクリックすると答えは出ますから、アプリケーション内に
Script機能を取り込む方法はあるかもしれません。ただしWinXP/SP2以降でです。
投稿者 (削除されました)  () 投稿日時 2009/12/22 01:24:28
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/12/22 01:25:58
> アプリケーション内にScript機能を取り込む方法はあるかもしれません。
オショウさんが紹介された URL にある『ScriptControl』を使う事で
VBScript 等をアプリ上から利用できます。

他にはこんな方法とか、
Dim expression As String = "50*20/4+12*10"

Dim t As New DataTable()
t.Columns.Add("数式"GetType(String), expression)

MsgBox(t.Rows.Add()("数式"))

あるいは、こういった方法もあります。
Dim expression As String = "50*20/4+12*10"

Dim t As New DataTable()
MsgBox(t.Compute(expression, ""))