如何在VB6中声明MAX_DOUBLE?

时间:2009-05-30 05:21:58

标签: ide vb6 constants max minimum

根据VB6的MSDN帮助

  

浮点值可以表示为mmmEeee或mmmDeee,其中mmm是尾数,eee是指数(10的幂)。单数据类型的最高正值是3.402823E + 38,或者是38次幂的3.4倍; Double数据类型的最高正值是1.79769313486232D + 308,或大约1.8倍10到308的幂。使用D在数字文字中分隔尾数和指数会导致该值被视为Double数据类型。同样,以相同的方式使用E会将值视为单一数据类型。

现在在VB6 IDE中我试图输入这个

const MAX_DOUBLE as Double = 1.79769313486232D+308

然而,只要我离开该行,IDE就会抛出错误6(溢出)

  

当您尝试进行超出分配目标限制的分配时,会出现溢出。 ...

那么如何定义MAX_DOUBLE(以及MIN_DOUBLE)?

4 个答案:

答案 0 :(得分:4)

它必须是Const吗?通过使用Byte数组中的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

答案 1 :(得分:3)

修改: 解决了!

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

Double将其检查到二进制级别,该级别应该尽可能高。您可以继续添加像1等值,但它会产生一个等于,不大于的数字。 输出是这样的: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 这确实是DoubleMax

旧: 您可以使用Positive infinity

答案 2 :(得分:0)

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

Const MAX_DOUBLE As Double = 1.79769313486231E+308

我认为在大多数情况下这都是足够的。

答案 3 :(得分:-1)

在数字中使用“E”表示指数而不是如下所示的“D”。

Public Const MAX_DOUBLE = 1.79769313486232E+308

[编辑]

请看下面的链接,滚动到底部。这个具体的代码示例显示了如何使用此构造。希望这会有所帮助。

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