Open Edge 12.2.8中STRING()函数格式化数字无法消空格问题
OpenEdge 12.2.8 用STRING()消除数字前导空格的正确姿势
问题场景
用OpenEdge 12.2.8的STRING()函数格式化数字时,碰到了棘手的情况:
- 执行
STRING(13, "Z99"),输出结果为" 13" - 按照文档说明换用
>格式符尝试STRING(13, ">99"),结果还是" 13",前导空格始终消不掉
目前靠TRIM()能临时解决,但想知道有没有不用TRIM()的原生办法,或者是不是我误解了文档里的>格式符作用?
问题根源:对>格式符的理解偏差
Progress文档里提到的>格式符,并不是用来消除前导空格的——它的实际作用是抑制前导零的显示,同时将后续格式规则应用到所有有效数字位。比如格式化带前导零的数字013时,>999会输出"13"而非"013";但对13这种本身无前导零的整数,它无法处理前导空格——因为这个空格是固定宽度格式串(比如99)的右对齐补位,并非前导零。
无需TRIM()的解决方案
要生成无前置空格的数字字符串,得用可变长度的格式串,而非固定宽度的格式定义:
- 用
&格式符适配数字实际长度:STRING(13, "9&") // 输出 "13" STRING(123, "9&") // 输出 "123"&会根据数字的实际位数自动调整输出长度,不会补前导空格。 - 如果不需要自定义格式,直接用不带格式参数的STRING()函数:
这种方式直接将数字转换为无多余空格的字符串,简单高效。STRING(13) // 输出 "13"
关于Z格式符的补充
Z格式符的作用是将无有效数字的位显示为空格(而非零),但它仍依赖固定宽度的格式串。按逻辑Z99格式化13应该输出"13",如果你的场景中出现了" 13",可以检查下数字变量是否带有FORMAT属性,或是有其他代码逻辑影响了格式输出。
内容的提问来源于stack exchange,提问作者XOYZ
相关产品推荐
相关产品推荐

