对付天文数字运算有没有什么办法
一计算就溢出的
[解决办法]
如果是相与就比较简单:
Function BigAnd(ByVal v1 As Variant, ByVal v2 As Variant) As Variant
Dim dec1 As Variant
Dim dec2 As Variant
Dim dec3 As Variant
Dim block1 As Variant
Dim block2 As Variant
'不支持小数、负数
dec1 = CDec(Int(Abs(CDec(v1))))
dec2 = CDec(Int(Abs(CDec(v2))))
While (dec1 > 0#) And (dec2 > 0#)
dec1 = BigDiv(dec1, &H10000, block1)
dec2 = BigDiv(dec2, &H10000, block2)
dec3 = dec3 * CDec(&H10000) + CDec(CLng(block1) And CLng(block2))
Wend
BigAnd = dec3
End Function
Function BigDiv(ByVal divident As Variant, ByVal divisor As Variant, ByRef remainder As Variant) As Variant
BigDiv = CDec(Int(CDec(divident) / CDec(divisor)))
remainder = CDec(divident) - BigDiv * CDec(divisor)
Debug.Print divident & " / " & divisor & " = " & BigDiv & " | " & remainder
End Function
测试:
?BigAnd( "9223635954298781951 ",1)
1
对付天文数字运算有没有什么办法解决方法
对付天文数字运算有没有什么办法一计算就溢出的[解决办法]如果是相与就比较简单:Function BigAnd(ByVal v1
