问题描述
我正在使用 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 ?