Crystal reports 水晶报告“;这里需要一个数字“quot;

Crystal reports 水晶报告“;这里需要一个数字“quot;,crystal-reports,Crystal Reports,我正在水晶报告中写一些公式。我有一个字段,它可能包含一个数值,在这种情况下,我正在对它进行计算,或者它可能包含一个字符串值,在这种情况下,它应该逐字返回。所以我认为应该这样做:如果Result.entry包含一个数字,那么将该数值放入Result,否则只返回Result.entry: Local NumberVar Result := 0; if NumericText({RESULT.ENTRY}) // may be N.D. or B.L.D. then

我正在水晶报告中写一些公式。我有一个字段,它可能包含一个数值,在这种情况下,我正在对它进行计算,或者它可能包含一个字符串值,在这种情况下,它应该逐字返回。所以我认为应该这样做:如果Result.entry包含一个数字,那么将该数值放入Result,否则只返回Result.entry:

    Local NumberVar Result := 0;
    if NumericText({RESULT.ENTRY}) // may be N.D. or B.L.D.
       then 
           ( Result:=val({RESULT.ENTRY});)
       else  (
            {RESULT.ENTRY} );
     );
    // something more going on here that at last returns some value
但是没有…“这里需要一个数字”CR说,并突出显示了下面的块。。。有没有任何线索可以说明Crystal Reports在这里想要什么,为什么这是不可接受的?我甚至尝试设置一个值,并在之后报告(根据),但仍然得到相同的错误

else ( 0 );

工作-但这绝对不是我想要的。(此函数的另一个返回值也是一个字符串)

如果您试图指定部分为
number
,部分为
string
,而这两个部分都不起作用,则您可以同时返回两个数字或两个字符串

因此,将数值保存为字符串,并在计算中使用时转换为数字

Local StringVar Result;
    if NumericText({RESULT.ENTRY}) // may be N.D. or B.L.D.
       then 
           Result:={RESULT.ENTRY};
       else  (
            {RESULT.ENTRY} );
     );

现在,当在计算中使用时,您可以使用
ToNumber(Result)

这里需要注意的是,如果将某个内容声明为NumberVar,那么要添加的字段必须是一个数字。如果处理小数,请使用CurrencyVar,因为您无法将NumberVar设置为0,然后将其添加到一个十进制值,这将导致在此处获得一个数字,这是预期的结果。

什么是“else({result.ENTRY})”呢?