You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 4GL字符转十进制方法及代码报错排查请求

在Progress 4GL中解决字符转十进制的格式报错问题

嘿,我来帮你搞定这个问题!你遇到的"Value cannot be displayed using ->>>,>>>,>>9.999999"错误,根源其实很简单:你定义的TEMP-TABLE字段格式,根本装不下转换后的十进制数值长度。

咱们一步步拆解:

问题出在哪?

你的字符变量cDateTime值是"20191604121566",用DECIMAL()转换后得到的是20191604121566.00——这是一个14位的整数加两位小数。但你给tt_data.DateTime字段设置的格式"->>>,,>>9.99",整数部分最多只能容纳6位数字(>>>,,>>9的结构意味着最大能显示999,999),和你实际的14位数值比起来,空间差太多了,Progress自然没法用这个格式显示,就抛出错误了。

怎么解决?

1. 调整字段格式,匹配数值长度

你只需要修改TEMP-TABLE字段的FORMAT,让它能装下14位整数就行。推荐用支持千分位的格式,看起来更清晰:

DEFINE TEMP-TABLE tt_data NO-UNDO
    FIELD DateTime AS DECIMAL FORMAT ">>>,>>>,>>>,>>9.99".

要是觉得千分位没必要,也可以直接用足够多的占位符:

DEFINE TEMP-TABLE tt_data NO-UNDO
    FIELD DateTime AS DECIMAL FORMAT "->>>>>>>>>>>>>>9.99".

改完之后,转换后的数值就能正常显示了。

2. 额外提个醒:检查日期时间字符串的合理性

另外,你的cDateTime值"20191604121566"看起来像是日期时间拼起来的,但这里面有不太合理的地方:

  • 秒数是66,正常秒数范围是0-59,这明显不对
  • 如果是YYYYMMDD的日期格式,20191604里的16是月份,这显然无效;如果是YYYYDDMM,那16是日期、04是月份,这倒是合理,但还是得确认你的格式逻辑

要是这个字符串是用来处理日期时间的,建议先把格式捋顺,避免后续出现其他逻辑错误。

修改后的完整代码示例

DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
DEFINE TEMP-TABLE tt_data NO-UNDO
    FIELD DateTime AS DECIMAL FORMAT ">>>,>>>,>>>,>>9.99".

ASSIGN cDateTime = "20191604121566".
CREATE tt_data.
ASSIGN tt_data.DateTime = DECIMAL(cDateTime).

/* 测试一下转换结果 */
MESSAGE "转换后的十进制值:" tt_data.DateTime VIEW-AS ALERT-BOX.

内容的提问来源于stack exchange,提问作者Thiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:22:13