根据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)?
答案 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