在处理大量小数(10E-9)和大数(10E + 8)来处理VBA中的代数方程时要使用哪些数据types?

以下是我的代码的简化版本。 我已经为我用来执行代数方程(“hexsimvalue”)的variables定义了以下数据types。 此刻,我收到一个错误说“无效的数据types”

sub test() Dim simvalue As Long, hexsimvalue As Single, resolution As Single, vDB With Sheet1 vDB = .Range("a1").CurrentRegion 'Get data to array from excel data range n = UBound(vDB, 1) 'Size of array (row of 2 dimension array) End With For i = 2 To n resolution = vDB(i, 5) simvalue = vDB(i, 13) 'Algebraic equation: hexsimvalue = Round(Hex((simvalue) / resolution), 0) next i end sub 

excel中的数据图片:

先谢谢你!

尝试这个!

 Sub test() Dim simvalue As Long, hexsimvalue As String, resolution As Single, vDB With Sheet1 vDB = .Range("a1").CurrentRegion 'Get data to array from excel data range n = UBound(vDB, 1) 'Size of array (row of 2 dimension array) End With For i = 2 To n resolution = vDB(i, 5) simvalue = vDB(i, 13) 'Algebraic equation: hexsimvalue = MyHex(Round((simvalue) / resolution, 0)) Next i End Sub 

该错误似乎发生,因为你正试图存储一个hex值像186A00在一个单一的variables,所以如果你改变它的types为string它应该工作

编辑

你有一个溢出错误,因为“hex”function,所以你将需要做一个function,从十进制转换为hex。 我会发布一个我发现的function。

 Private Function MyHex(ByVal TempDec As Double) As String Dim TNo As Integer MyHex = "" Do TNo = TempDec - (Fix(TempDec / 16) * 16) If TNo > 9 Then MyHex = Chr(55 + TNo) & MyHex Else MyHex = TNo & MyHex End If TempDec = Fix(TempDec / 16) Loop Until (TempDec = 0) End Function 

这些是你精确度最好的select

十进制的16个字节
0到+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9 … E + 28)†没有小数点; 0到+/- 7.9228162514264337593543950335,小数点右边有28位; 最小的非零数字是+/- 0.0000000000000000000000000001(+/- 1E-28)

双(双精度浮点)8个字节
-1.79769313486231570E + 308至-4.94065645841246544E-324†负值; 4.94065645841246544E-324至1.79769313486231570E + 308†正值