pow(2,39) 附近的数字如何对于 64 位整数值来说太大了?

问题描述

我正在使用 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 位应用程序,我不知道,我怎么能从过程编辑器/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 ?