VBA中的64位无符号整数除法



我有一个函数,它返回VBA不支持的无符号64位整数。我已经看到了使用Currency的解决方案,但我想使用Type来实现。这就是我想到的:

Public Type LARGE_INTEGER
LoPart As Long
HiPart As Long
End Type
Private Const SCALE_UP As Double = 2^32 - 1
Public Function IntegerDivide(ByRef numerator As LARGE_INTEGER, ByRef denominator As LARGE_INTEGER) As Double
IntegerDivide = Normalify(numerator) / Normalify(denominator)
End Function
Public Function Largify(ByVal normal As Double) As LARGE_INTEGER
Largify.HiPart = normal / SCALE_UP
Largify.LoPart = normal - Largify.HiPart * SCALE_UP
End Function
Public Function Normalify(ByRef large As LARGE_INTEGER) As Double
Normalify = large.HiPart * SCALE_UP + large.LoPart
End Function

我有一种感觉,它可能是有缺陷的,因为偏离了一个错误或两个的补码。但我对这些东西还不够了解。这是正确的吗?

例如,这里有一个返回64位无符号整数的示例函数

Private Declare Function QueryPerformanceCounter Lib "KERNEL32" (ByRef outTickCount As LARGE_INTEGER) As Long 'BOOL

您有现成的Decimal类型,可以对最多12个字节的整数执行操作。

不能将变量声明为";小数";但您可以将它们声明为";变体";并使用";Cdec";函数将它们转换为十进制,然后所有整数运算都将正确处理这些大整数。

最新更新