12桁以上の演算をする場合には、どのようにすればよいのでしょうか?
12345678901 を 7 で割ったあまりを求めたいのですが。
初歩的なことですみません。
変数の型がIntegerとかLongとかになってませんか?
Double型にして下さい。
Double型でやってはいるのですが。。。
Dim a As Double
Dim b As Double
Dim c As Double
a = 12345678901#
b = 7#
c = a Mod b ← ここでオーバーフローとなります。
説明がつたなくてすみません。
よろしくお願いします。
MODでDouble型は使えないので、別の方法を考えるしかないです。
例えば、元の数を7で割って、答えを元の数から引くとか。
あ、割った後に小数点以下をIntやFix関数で取り出してから、その数を
元の値から引いてください。
整数を対象とした14桁程度までの計算では通貨型に変換した方が誤差は少ない様です。下記の例ではText1とText2にデータを入れてText5に余りを表示しています。10進数に変換すると大きな数字が使えますが誤差が出て答えが合いませんでした。
Private Sub Command1_Click()
Dim c
c = CCur(Text1.Text) / CCur(Text2.Text) '通貨型変数
Text3.Text = c
Text4.Text = Int(c)
Text5.Text = CCur(Text1.Text) - CCur(Text4.Text) * CCur(Text2.Text)
End Sub
あまり参考にならないかもしれませんが・・・
「10進数から2進数に変換する効率のいい方法」に
デシマル型使った例をあげてます。
↑は、あまり参考にならなさそうなので、参考になる例を・・・
Dim buf1, buf2, buf3
buf1 = "79228162514264337593543950330"
buf2 = "1000000000000"
buf3 = Split((CDec(buf1) / CDec(buf2)), ".")
MsgBox "あまりは " & CStr(CDec(buf1) - CDec(buf3(0)) * CDec(buf2))
ツイート | ![]() |