No.1
- 回答日時:
どもども田吾作7です。
('_`)ウゥ 計算は標準で有効桁数が限られているので、標準では出来ないと思います。(もし出来るのであれば、ぼくも知りたいです。だれか教えて!)
ぼくの場合は自分で計算モジュールを作っちゃいます。
一応たし算とかけ算のサンプルを載せておきます。
そういえば、この前別の質問に答えて、サンプルを参考URLに載せたら、gooの人から「直接リンクを張ってはいけない」とメールが送られてきて、しかもその発言を削除されてしまいました。。。(-ロ-;グハッ
どうやら、いけない行動だったらしいのです。ですので、ここにアドレスを書いときます。(ここならOKなのかな?)
http://f-ga.com/Lib/CalcProject.lzh
以下のソースは上記のファイルのソースを、コピペしたものです。
必要なコントロール
Command1
Text1
Text2
Label1
Command2
Text3
Text4
Label2
Private Sub Command1_Click()
'たし算
Dim wkStr As String
Dim wkLng As Long
With Me
'テキスト1には数値が長くても大丈夫
wkStr = .Text1.Text
'テキスト2にはLONG型に収まる値にしてください
wkLng = Val(.Text2.Text)
.Label1 = funcTASU(wkStr, wkLng)
End With
End Sub
Private Sub Command2_Click()
'かけ算
Dim wkStr As String
Dim wkLng As Long
With Me
'テキスト3には数値が長くても大丈夫
wkStr = .Text3.Text
'テキスト4にはLONG型に収まる値にしてください
wkLng = Val(.Text4.Text)
.Label2 = funcKAKERU(wkStr, wkLng)
End With
End Sub
Function funcTASU(inStrNumber As String, inLngPlusNumber) As String
Const CutNum As Long = 3 'とりあえず3桁で区切ることにする
Dim wkMaxLen As Long '文字型ナンバーの桁数
Dim wkMaxCnt As Long 'ループ回数
Dim wkMod As Long '3桁にならない余りの上位桁
Dim i As Long 'ループカウンタ
Dim wkSpotPos As Long '区切り位置
Dim wkSpotNum As Long '区切られた部分の数値
Dim wkCalc As Long '計算用ワーク
Dim memCalc As String '計算用ワーク
Dim ketaCalc As Long '桁上がり計算用ワーク
If Not IsNumeric(inStrNumber) Then GoTo PGMEND
wkMaxLen = Len(inStrNumber)
'この回数繰り返す
wkMaxCnt = (wkMaxLen \ CutNum)
'3で割り切れない桁数を得る
wkMod = (wkMaxLen Mod CutNum)
'余りがあるとき、ループ数を増やす
If Not (wkMod = 0) Then
wkMaxCnt = wkMaxCnt + 1
End If
For i = 1 To wkMaxCnt
'基本的に3桁づつ取り出す
If (i = wkMaxCnt) And (Not (wkMod = 0)) Then
'最上位桁が3桁じゃない時、上位余り桁を得る
wkSpotNum = Left(inStrNumber, wkMod)
Else
'それ以外
wkSpotPos = (wkMaxLen - (i * CutNum) + 1)
wkSpotNum = Mid(inStrNumber, wkSpotPos, CutNum)
End If
If i = 1 Then
'最下位桁には指定の値をたす
wkCalc = inLngPlusNumber + wkSpotNum
Else
'最下位桁以外は、繰り上がりの値をたす
wkCalc = wkSpotNum + ketaCalc
End If
'上位桁として下3桁だけ連結させる
memCalc = Right(wkCalc, CutNum) & memCalc
'10の3乗で除算し、その答えが桁上がり
ketaCalc = wkCalc \ (10 ^ CutNum)
Next i
'桁上がりが存在していたら、上位桁として連結
If Not (ketaCalc = 0) Then
memCalc = ketaCalc & memCalc
End If
PGMEND:
'返り値をセット
funcTASU = memCalc
End Function
Function funcKAKERU(inStrNumber As String, inLngKakeruNumber) As String
Const CutNum As Long = 3 'とりあえず3桁で区切ることにする
Dim wkMaxLen As Long '文字型ナンバーの桁数
Dim wkMaxCnt As Long 'ループ回数
Dim wkMod As Long '3桁にならない余りの上位桁
Dim i As Long 'ループカウンタ
Dim wkSpotPos As Long '区切り位置
Dim wkSpotNum As Long '区切られた部分の数値
Dim wkCalc As Long '計算用ワーク
Dim memCalc As String '計算用ワーク
Dim ketaCalc As Long '桁上がり計算用ワーク
If Not IsNumeric(inStrNumber) Then GoTo PGMEND
wkMaxLen = Len(inStrNumber)
'この回数繰り返す
wkMaxCnt = (wkMaxLen \ CutNum)
'3で割り切れない桁数を得る
wkMod = (wkMaxLen Mod CutNum)
'余りがあるとき、ループ数を増やす
If Not (wkMod = 0) Then
wkMaxCnt = wkMaxCnt + 1
End If
For i = 1 To wkMaxCnt
'基本的に3桁づつ取り出す
If (i = wkMaxCnt) And (Not (wkMod = 0)) Then
'最上位桁が3桁じゃない時、上位余り桁を得る
wkSpotNum = Left(inStrNumber, wkMod)
Else
'それ以外
wkSpotPos = (wkMaxLen - (i * CutNum) + 1)
wkSpotNum = Mid(inStrNumber, wkSpotPos, CutNum)
End If
'とりあえずかける
wkCalc = inLngKakeruNumber * wkSpotNum
'繰り上がりの値をたす
wkCalc = wkCalc + ketaCalc
'上位桁として下3桁だけ連結させる
memCalc = Right(wkCalc, CutNum) & memCalc
'10の3乗で除算し、その答えが桁上がり
ketaCalc = wkCalc \ (10 ^ CutNum)
Next i
'桁上がりが存在していたら、上位桁として連結
If Not (ketaCalc = 0) Then
memCalc = ketaCalc & memCalc
End If
PGMEND:
'返り値をセット
funcKAKERU = memCalc
End Function
ってな感じです。
でわでわ
No.2ベストアンサー
- 回答日時:
再度田吾作7です。
これを実行してみてください。
'バリアントで宣言
Dim wkDecimal As Variant
'10進型でセット
wkDecimal = CDec(999999999999999# * 9999999#)
'イミディエイトウィンドウへ出力
Debug.Print wkDecimal
Dim の所でDecimal(10進型)で宣言したいところですが、それは出来ないようです。ですのでバリアント型で宣言しておき、値をセットするタイミングで10進型にしてあげます。するとバリアントのwkDecimalは、内部で10進型の変数になります。
偶然的に見つけたものですから、詳しく実験はしておりません。。。
でわでわ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 化学 有効数字の取り扱いについて 高校化学では、測定値同士の計算結果の有効数字は、測定値に合わせるようにな 4 2022/06/30 14:07
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- 高校 高校化学、気体、温度の有効数字 3 2023/04/02 11:39
- 化学 有効数字の問題にです 4 2022/08/02 22:33
- 物理学 「NHKの時報の音は、振動数が440Hzです。この音の波長を求めましょう。ただし、音の伝わる速度を3 6 2023/03/02 18:24
- 大学受験 化学の問題で、計算結果が例えば33.2のとき、有効数字を2桁で答える場合、答えは「33」ですか?それ 2 2022/11/15 20:00
- Google+ 5+9+24+32+128=? 各数字が2秒ほど表示されます。暗算できますか? 1 2023/02/05 20:16
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 計算機科学 99の問題なんですが、(1)を計算すると125になって有効数字三桁なので1.25×10^2mlかなと 3 2022/08/25 11:52
- その他(自然科学) 至急お願いします。 わからないです。 衛星Aは惑星Bのまわりを公転している。衛星Aの公転周期は16. 2 2022/06/09 19:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
ExcelでPC(パソコン)によって...
-
VBAでミリ秒まで出力する方法
-
VBAでの割り算の余りの求め方
-
パソコンで階乗を計算
-
VB6.0での小数点の扱いについて
-
16進数 加算 減算 C言語
-
三角比の俯角の計算
-
有効数字について 以前質問をし...
-
VB6のFIX関数での誤差について
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
バタフライ演算
-
EXCELの関数"STDEV(標準偏差)"...
-
4096bitを95種類で表現すると何...
-
2進数の足し算(C言語)
-
10進数での「25」が2進数では「...
-
C#プログラミング、少数の取...
-
VB.net Double と...
-
べき指数の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
除算を使わずに10で割りたい。
-
C言語プログラミングにて、arct...
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
255の2の補数、B'00000001'が-...
-
変換指定子%22-16gの表示...
おすすめ情報