pow(2,39) 附近的数字怎么可能对于 64 位整数值来说太大了呢?

How can a number, around pow(2,39), be too large for a 64-bit integer value?

我正在使用 Progress-4GL,11.6 版,appBuilder 和过程编辑器。

我有一个值为“1000000000000”的字符串,我想将其转换为整数。
首先我尝试使用简单的转换来做到这一点,但这没有用:

Result = INT(value). => runtime error 15747.

由于提到的值大约是 2^39 并且 INT 似乎用于 32 位值,这似乎是正确的。

因此,我决定使用更大的数据类型 INT64,但这似乎给出了相同的错误消息:

Result = INT64(value). => again runtime 15747.

这怎么可能?一个 64 位整数怎么可能不能保持 2^39 左右的值?

哦,如果你想知道我创建的是 32 位还是 64 位应用程序,我不知道,我如何从过程中知道 editor/appBuilder?

ABL INT64 不依赖于 Progress 运行时(32 位或 64 位)的进程架构。 AVM 隐藏了这些细节。 ABL INT64 可以容纳从 -9223372036854775808 到 9223372036854775807

这里的效果很好。我什至加了几个零。

DEFINE VARIABLE i AS INT64 NO-UNDO.

ETIME (YES)   .

i = INT64 ("1000000000000") .

MESSAGE "time" ETIME SKIP 
        "i" i 
    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
    
    
ETIME (YES)   .

i = INT64 ("100000000000000000") .

MESSAGE "time" ETIME SKIP 
        "i" i 
    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.    

您的变量 Result 定义为 INTEGER 还是 INT64?