不带前导字符的进度 ABL 格式十进制数

Progress ABL format decimal number without leading characters

我只想格式化一个十进制数以输出到一个简单的 CSV 格式文件。 我觉得我很愚蠢,但我找不到没有前导零或空格的方法,当然我可以简单地 trim 前导空格,但必须有一种正确的方法来格式化就像我那样,不是吗?

例子

define variable test as decimal.
define variable testString as character.
test = 12.3456.
testString = string(test, '>>>>>9.99').
message '"' + testString + '"' view-as alert-box. /* "    12.35" */

我尝试使用 >>>>>9.99zzzzz9.99 作为数字格式,但两者都使用前导空格来格式化字符串。我实际上不知道使用 >z.

之间有什么区别

SUBSTITUTE() 函数将执行您描述的要求:

define variable c as character no-undo.
c = substitute( "&1", 1.23 ).
display "[" + c + "]".

(如果你真的只想要 2 个小数位,请输入 TRUNCATE( 1.2345, 2 )。)

其实这个也行:

string( truncate( 1.2345, 2 )).

如果您正在创建 CSV 文件,您可能需要考虑使用 EXPORT。 EXPORT 格式删除了前导空格并省略了像“,”这样的装饰。 SUBSTITUTE() 函数基本上使用 EXPORT 格式进行替换。当未指定其他格式时,STRING() 函数使用 EXPORT 格式。

EXPORT 语句将为您格式化数据。这是一个例子:

DEFINE VARIABLE test AS DECIMAL NO-UNDO.
DEFINE VARIABLE testRound AS DECIMAL NO-UNDO.
DEFINE VARIABLE testString AS CHARACTER NO-UNDO.

test = 12.3456.
testRound = ROUND(test, 2).
testString = STRING(test).

OUTPUT TO VALUE("test.csv").
EXPORT DELIMITER "," test testRound testString.
OUTPUT CLOSE.

这是输出:

12.3456,12.35,"12.3456"

EXPORT 语句的默认分隔符是 space,因此您必须为 CSV 文件指定一个逗号。由于 testtestRound 变量是小数,因此它们在输出中不在引号中。 testString 是字符,所以它在引号中。