編集:この部分は解決しました!
そのため、作成中のプログラムに大量の計算があり、数値が長くなりすぎてオーバーフロー エラーが発生しています。これは、50 桁の数字を別の 50 桁の数字で割ったような結果です。特定の数値を特定の有効桁数に丸める方法が必要です。
ここにいくつかの詳細情報があります。まず、四捨五入するすべての数値は常に 1 未満です。数値は 1E-50 と同じくらい小さくなります。最初の 10 桁程度の有効数字しか気にしません。オーバーフロー エラーを防ぐために、次の計算に進む前に、約 10 個の sig figs に丸める方法が必要です。それと、数字が 50 桁になることは非常に役に立ちません。
数字を1桁ずつループすることを考えていましたか?プログラムは、数値がゼロに等しいときにカウンターに 1 を追加し、ゼロ以外の何かに到達するとループから抜け出すことができます。次に、次のステップで、そのカウンターに加えて、必要な有効桁数まで数値を切り捨てることができます。
たとえば、.000001234567812345678 の場合です。5 つのゼロが返されます。10 桁の有効数字が必要な場合は、5 + 10 = 15 とします。この場合、プログラムは小数点以下の最初の 15 桁のみを保持するため、数値は .000001234567812 に切り捨てられます。
別のアイデアは、ログを使用することです。次に、新しい数値が累乗される累乗は、有効数字の前にあるゼロの数になります。
私が知らないのは、まず、数字を 1 桁ずつ調べる方法と、各数字がゼロかどうかを確認する方法です。また、数値を特定の桁数に切り捨てる方法もわかりません。
どんな助けでも大歓迎です!
編集:この部分は解決されていません。
すぐに別の投稿をするのは気分が悪いので、ここで質問します。20分くらい経っても返事がない場合は、別の投稿をするかもしれません。なぜこれが機能しないのですか?
Sub Rounding()
Tracker = 0
For i = 1 To 10
Tracker = Tracker + 1
Cells(1, Tracker) = Rnd
Cells(1, Tracker) = Application.Evaluate("=Round(Cells(1, Tracker), 4 - (Int(Log(Cells(1,Tracker))) + 1))")
Next
Columns("A:J").EntireColumn.AutoFit
End Sub
すべてのセルで #NAME? というエラーが表示され続けます。これにより、各数値が有効数字 4 桁に丸められます。