按照MSDN帮助VB6

  

浮点值可以被表示为mmmEeee或mmmDeee,其中mmm是尾数和EEE是指数(10的幂)。一个单一数据类型的最高正值是3.402823E + 38,或3.4倍至10的第38电源;双数据类型的最高正值是1.79769313486232D + 308,或约1.8倍10向第308功率。使用d在数字文字的尾数和指数分离导致被视为双数据类型的值。同样地,以相同的方式使用e对待值作为一个单一数据类型。

现在在VB6 IDE我试图进入这个

const MAX_DOUBLE as Double = 1.79769313486232D+308

然而,只要我从该行中的IDE抛出移开一个错误6(溢出)

  

当您尝试溢出结果做出超出分配对象的限制分配。 ...

所以,我怎么MAX_DOUBLE(和MIN_DOUBLE为此事)定义的?

有帮助吗?

解决方案

它必须是一个const?可以通过设置使用CopyMemory的从字节数组的正确位模式获得MAX_DOUBLE的精确值到变量中。

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim Max As Double
Dim Idx As Long
Dim Bits(0 To 7) As Byte

For Idx = 0 To 5
   Bits(Idx) = 255
Next
Bits(6) = 239 ' = 11101111
Bits(7) = 127

For Idx = 0 To 7
   CopyMemory ByVal VarPtr(Max) + Idx, Bits(Idx), 1
Next

Debug.Print Max

编辑:我忘了,你还问MIN_DOUBLE,这是更容易

Dim Min As Double
Dim Bits As Byte

Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1

Debug.Print Min

其他提示

修改: 解决它!

Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293

双重检查它归结为二进制级别,这应该是高,你可以走了。您可以继续添加值,像1等,但它产生的数等于,大于。 输出是这样的: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 这的确是DoubleMax

旧: 你可以只使用正无穷大

明显的解决方法务实:减少数略微

Const MAX_DOUBLE As Double = 1.79769313486231E+308

我想那将是在大多数情况下足够了。

使用一个“E”用于指数的数量,而不是一个“d”像这样的下方。

Public Const MAX_DOUBLE = 1.79769313486232E+308

[编辑]

看看下面这个链接,滚动至底部。这个具体例子演示了如何该构建正在使用。希望这有助于。

HTTP://www.experts- exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22555684.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top