Ibm midrange RPGLE as400中的十进制问题

Ibm midrange RPGLE as400中的十进制问题,ibm-midrange,rpgle,Ibm Midrange,Rpgle,如何在输出文件中获取0142而不是142? QDECFMT设置为2,我的H规范已取消编辑('0',),但仍无法获取左侧的零。 谢谢你的帮助 Aïcha假设您使用DDS来描述打印机文件,请查看中有关EDTCDE和EDTWRD的IBM文档。通常,RPG中数字格式的简单解决方案是使用定义的编辑代码或自定义编辑字,但我认为它们不会单独在您的情况下工作。没有系统定义的编辑代码与所需格式匹配,而且自定义编辑字似乎总是删除前导零:和 在注释中,您说您正在使用WRITE操作写入假脱机输出文件。您必须执行字符串操

如何在输出文件中获取0142而不是142? QDECFMT设置为2,我的H规范已取消编辑('0',),但仍无法获取左侧的零。 谢谢你的帮助
Aïcha

假设您使用DDS来描述打印机文件,请查看中有关EDTCDE和EDTWRD的IBM文档。

通常,RPG中数字格式的简单解决方案是使用定义的编辑代码或自定义编辑字,但我认为它们不会单独在您的情况下工作。没有系统定义的编辑代码与所需格式匹配,而且自定义编辑字似乎总是删除前导零:和

在注释中,您说您正在使用
WRITE
操作写入假脱机输出文件。您必须执行字符串操作才能实现所需的功能。我可以想出几种方法来做这件事。您可以使用函数%editc(值:'X')为您提供一个格式为'0847'的字符串,并使用%subst将其切碎并插入','yourself'。您可以除以1000并将其截断为一个整数(%int或%dec),从原始数中减去,然后将这两个数字转换为中间带“,”的字符串。无论哪种方式,您都必须自己编写,因为基本的语言工具无法按您想要的方式格式化


无论您的假脱机文件是用DDS外部描述的,还是用O规范描述的程序,都会发生同样的情况。无论哪种方式,我都会将字段设置为字符串,而不是数字,然后手动设置其格式。

RPG中的
decedit
设置对数据库中的数值没有任何影响

它对SQL查询工具显示数据的方式也没有任何影响

无论是绿色屏幕的STRSQL还是GUI运行的SQL脚本工具都没有一个选项可以在数字字段上显示前导零

相信数据库,数值是正确的

如果您确实想查看它,则需要使用
varchar\u format()
函数将数值转换为字符

select varchar_format(dec(.95,5,2), '000.00') 
from sysibm.sysdummy1                         
编辑
根据OP的评论

使用输出文件类型*PF而不是*table解决了此问题 (使用DDS创建,数字字段上带有edtcode(j)


问题没有“解决”,表中的实际数据与PF之间绝对没有差异。只是旧工具的UI可以识别PF中指定的代码。在PF中使用EDT代码的原因是,您可以将PF用作DSPF或PRTF中的参考文件,并自动拾取编辑代码。

没有足够的详细信息。从“H-Spec”中我猜你在使用某种RPG。我也猜你的“输出文件”是一个用于打印的假脱机文件。你怎么给它写信?O型规格?打印机文件?是的,我正在使用RPGLE。不,该文件是一个sql表,我在c-SPECT中使用“写入格式”对其进行写入数据表示(您希望事先有一个0),实际数据通常是分开的。只要你的程序没有故障,就让它保持原样。如果正确定义了输出表的字段,那么从SQL表获取数据的任何程序通常都会做正确的事情。但是,如果您只是试图将数字中的文本插入到输出文件中,我想数据处理概念本身是有缺陷的。同样,我的猜测太多,你的细节不够。我的输出表是从我的程序中完成的一个数字操作中获取数据。获取此数据的字段被设置为十进制(15,3),我只想取消显示0142而不是142。使用输出文件类型*PF而不是*table(使用DDS创建,数字字段上带有edtcode(j))解决了问题@aicha04问题未“解决”表中的实际数据与PF之间绝对没有差异。只是旧工具的UI可以识别PF中指定的代码。