Excel VBA运行时错误6溢出-为什么会发生这种情况?

Excel VBA运行时错误6溢出-为什么会发生这种情况?,excel,runtime-error,overflow,vba,Excel,Runtime Error,Overflow,Vba,在我对以下问题的回答中:在Math SE上,我目前在线上遇到一个运行时错误: P=599*601 错误消息为运行时错误6溢出 p被定义为double类型的公共变量。我也在我的“模”函数中使用了p,定义为双精度 为什么会发生这种情况,我能做些什么来纠正它 我找到了一个解决方法:如果我将所述行改为: P=359999 这样就不会发生错误。因此,为什么P=599*601行会出现错误?经过研究,我发现这个怪癖可以通过以下代码解决: Dim Prime1 as Long Dim Prime2 as L

在我对以下问题的回答中:在Math SE上,我目前在线上遇到一个运行时错误:

P=599*601
错误消息为运行时错误6溢出

p被定义为double类型的公共变量。我也在我的“模”函数中使用了p,定义为双精度

为什么会发生这种情况,我能做些什么来纠正它

我找到了一个解决方法:如果我将所述行改为:

P=359999

这样就不会发生错误。因此,为什么P=599*601行会出现错误?

经过研究,我发现这个怪癖可以通过以下代码解决:

Dim Prime1 as Long
Dim Prime2 as Long
Public P as Long
...
P=Prime1 * Prime2

问题的原因可能是由于当乘以整数时,由于数字被赋予了整数类型p。

p
是双精度的吗?为什么?在您的情况下,您应该将其
设置为Long
,在这里阅读有关数据类型的更多信息:因此我需要将这两种数据类型都更改为Long for p?-例如,在“公共P为双精度”和模函数“P为双精度”行中,问题已更新,请检查原因是
599
601
都是整数,因此
Integer*Integer
的计算试图给出
Integer
结果,并溢出。只要两个数字中的一个是
long
(例如
P=599&*601
,或
P=599*601&
,或
P=CLng(599)*601
等),那么计算就可以进行。计算完成后,结果被放入
P
,因此
P
在任何时候都不会被视为
整数
,而只是中间计算。