投稿

小数を分数に変換(1)

前回までで、四則演算を含んだ文字列を数値(小数)に変換できた。 で、分数(割り算)で入力したものは分数で出力するのが自然じゃないかと考えた。 そこで、小数を分数に変換することを考える。 精度を保ったままということを考えたら連分数を用いるのがよさそうだ。 処理の流...

文字列数式評価(6/完)~メイン処理

細かく分けて関数化したので、メインのプログラムは数行で済む。 '   機 能  :   文字列を数値に変換する '   書 式  :   XEval(x) '   返り値  :   10 進型小数 '   引 数  :   x   -   文字列 '   説 明  :   x に数値を指定したときは倍精度の小数を返す '               (例)  ...

文字列数式評価(5)~各項の和

残るは各項を足し合わせる処理だが、 乗除算とほぼ同じ処理になる。 '   各項の和を計算 Private Function XEVal_PM(ByVal s)     On Error GoTo Err:     Set XEVal_PM = New Triple         Dim i               As Long         '   繰り返し変数     '   "+" で分解     s = Split(s, "+")     XEVal_PM = CDec(0)     For i = 0 To UBound(s)         If Len(s(i)) > 0 Then          ...

文字列数式評価(4)~項内の乗除算

'   項の中(の乗除算)の計算 Private Function XEval_MD(ByVal s)     On Error Goto Err:     Set XEval_ = New Triple     Dim i               As Long         '   繰り返し変数     '   "/" を "*/" に変換し、"*" で分解     s = Split(Replace(s, "/", "*/"), "*")         XEval_MD = CDec(1)     For i = 0 To UBound(s)         '   除算を乗算に変換         If Left(s(i), 1) = "/" Then             ' ...

文字列数式評価(3)~符号処理

普通の式であればかっこを外したあとに 3つ以上符号("+","-")が連なることはないだろうが、 念のためそれも考慮した処理を組み立てる。 "+"で区切ることを考えると、 最終的に残すべきなのは"+"と"+-"ということになる。 連続する符号のパターンは "++", "--", "+-", "-+" の4通りで現れる度に前2つを"+"、後ろ2...

文字列数式評価(2)~かっこの処理

ではまず、かっこの中を抜き出す処理 '   機 能  :   かっこ内にある文字列 '   書 式  :   XInPTxt(s, [t]) '               XInPTxt s, [t] '   返り値  :   最初のあらわれる開きかっこと '               それに対応する閉じかっこの間の文字列 '   引 数  :   s   -   文字列...

文字列数式評価(1)

距離計算の前に、VBAでなるべく高精度を保ちたいと思い、 十進のvariant型をTripleクラスとして使えるようにしようと考えた。 Tripleクラスの既定プロパティとしてValueを作るのだが、 代入の時に (1)  foo = "5/7" としても値は倍精度の15桁にしかならない。 (2)  foo = CDec(5)/7 のようにする手もあるが、 CDecの被せ忘れが...