美文网首页
第二十四章 Caché 函数大全 $JUSTIFY 函数

第二十四章 Caché 函数大全 $JUSTIFY 函数

作者: Cache技术分享 | 来源:发表于2020-09-14 08:45 被阅读0次

    第二十四章 Caché 函数大全 $JUSTIFY 函数

    在指定宽度内右对齐表达式,四舍五入到指定的小数位数。

    大纲

    $JUSTIFY(expression,width,decimal)
    $J(expression,width,decimal)
    

    参数

    • expression 要右对齐的值。它可以是数字值、字符串文字、变量名称或任何有效的ObjectScript表达式。
    • width 表达式要在其中右对齐的字符数。正整数或计算结果为正整数的表达式。
    • decimal 可选-小数位数。正整数或计算结果为正整数的表达式。Caché将表达式中的小数位数四舍五入或填充到此值。如果指定DECIMAL,则Caché会将表达式视为数字。

    描述

    $JUSTIFY返回在指定宽度内右对齐的表达式指定的值。可以包括DECIMAL参数以将宽度内的数字小数对齐。

    • $JUSTIFY(expression,width):2参数语法在width内右对齐表达式。它不执行任何表达式转换。表达式可以是数字或非数字字符串。
    • $JUSTIFY(expression,width,decimal):3参数语法将表达式转换为规范数字,将小数点后的四舍五入或零位小数转换为十进制,然后在width内右对齐所得的数值。如果expression是非数字字符串,则Caché会将其转换为0,对其进行填充,然后对其右对齐。

    $JUSTIFY识别当前语言环境的DecimalSeparator字符。它根据需要添加或删除DecimalSeparator字符。 DecimalSeparator字符取决于语言环境;通常,对于美国格式的语言环境,它是一个句点(),对于欧洲格式的语言环境,通常是一个逗号()。若要确定语言环境的DecimalSeparator字符,请调用以下方法:

    DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
    .
    

    通常,$JUSTIFY用于格式化带小数位的数字:每个数字都具有相同的小数位数字,并且数字右对齐,以便DecimalSeparator字符在数字列中对齐。 $JUSTIFY对于使用WRITE命令输出格式化值特别有用。

    参数

    expression

    要右对齐的值,可以选择将其表示为具有指定数量的小数位的数字。

    • 如果需要字符串对齐,请不要指定小数。表达式可以包含任何字符。 $JUSTIFY对表达式进行右对齐,如width中所述。可以指定空字符串(“”)来创建指定宽度的空白字符串。
    • 如果需要数字对齐,请指定小数。如果指定了十进制,则$JUSTIFY将表达式转换为规范数字。它解析前导的正负号,并删除前导和尾随零。它在第一个非数字字符处截断表达式。如果表达式以非数字字符(例如货币$符号)开头,则$JUSTIFY会将表达式值转换为0。

    $JUSTIFY将表达式转换为规范数后,将其规范填充零或四舍五入为小数位的十进制数,然后对结果进行右对齐,如width中所述。 $JUSTIFY无法识别NumericGroupSeparator字符,货币$符号,多个DecimalSeparator字符或尾随的加号或减号。

    width

    右对齐转换后的表达式的宽度。如果width大于表达式的长度(在数字和小数位数转换之后),则Caché右对齐宽度,并根据需要用空白填充左填充。如果width小于表达式的长度(在数字和小数位数转换之后),则Caché将width设置为表达式值的长度。

    将width指定为正整数。宽度值0,空字符串(“”)或非数字字符串被视为宽度0,这意味着Caché将width设置为表达式值的长度。

    decimal

    小数位数。如果表达式包含更多小数位数,则$JUSTIFY将小数部分四舍五入到该小数位数。如果表达式包含较少的小数位数,则$JUSTIFY将零部分填充到该小数位数,并在需要时添加一个十进制分隔符。如果十进制= 0,则$JUSTIFY将表达式四舍五入为整数值并删除十进制分隔符。

    如果表达式值小于1,则$JUSTIFYDecimalSeparator字符之前插入前导零。

    $DOUBLEINF-INFNAN$JUSTIFY不变地返回,而与十进制值无关。

    $JUSTIFY$FNUMBER

    可以使用$FNUMBER格式化显示的数字。 $JUSTIFY$FNUMBER都可以四舍五入(或零填充)到指定的小数位数。 $FNUMBER也可用于添加NumericGroupSeparator字符。但是,请注意以下几点:

    • 使用$JUSTIFY将数字右对齐后,$FNUMBER无法格式化数字。 ($FNUMBER将前导空格解释为非数字字符。)
    • 一旦添加了NumericGroupSeparator字符或在货币符号前加了$JUSTIFY,就不能对数字进行数字对齐。 ($JUSTIFYNumericGroupSeparators或货币符号解释为非数字字符。)

    因此,要正确添加NumericGroupSeparators,四舍五入小数位,在货币符号前添加前缀以及将结果数字右对齐,请使用$FNUMBER来对NumericGroupSeparators进行四舍五入和插入。然后,可以将$JUSTIFY与2参数语法一起使用,以将结果字符串右对齐:

    /// d ##class(PHA.TEST.Function).JUSTIFY()
    ClassMethod JUSTIFY()
    {
        SET num=123456.789
        SET fmtnum=$FNUMBER(num,",",2)
        SET money="$"_fmtnum
        SET rmoney=$JUSTIFY(money,15)
        WRITE ">",rmoney,"<"
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).JUSTIFY()
    >    $123,456.79<
    

    示例

    以下示例对字符串执行右对齐。不执行数字转换:

    /// d ##class(PHA.TEST.Function).JUSTIFY1()
    ClassMethod JUSTIFY1()
    {
        WRITE ">",$JUSTIFY("right",10),"<",!
        WRITE ">",$JUSTIFY("aligned",10),"<",!
        WRITE ">",$JUSTIFY("+0123.456",10),"<",!
        WRITE ">",$JUSTIFY("string longer than width",10),"<",!
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).JUSTIFY1()
    >     right<
    >   aligned<
    > +0123.456<
    >string longer than width<
     
    

    以下示例使用指定数量的小数位执行数字右对齐:

    /// d ##class(PHA.TEST.Function).JUSTIFY2()
    ClassMethod JUSTIFY2()
    {
        SET var1 = 250.50999
        SET var2 = 875
        WRITE !,$JUSTIFY(var1,20,2),!,$JUSTIFY(var2,20,2)
        WRITE !,$JUSTIFY("_________",20)
        WRITE !,$JUSTIFY("TOTAL",9),$JUSTIFY(var1+var2,11,2)
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).JUSTIFY2()
     
                  250.51
                  875.00
               _________
        TOTAL    1125.51
    
    /// d ##class(PHA.TEST.Function).JUSTIFY2()
    ClassMethod JUSTIFY2()
    {
        SET var1 = 0.50999
        SET var2 = 875
        WRITE !,$JUSTIFY(var1,"",2),!,$JUSTIFY(var2,0,2)
        WRITE !,$JUSTIFY("_________",20)
        WRITE !,$JUSTIFY("TOTAL",9),$JUSTIFY(var1+var2,11,2)
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).JUSTIFY2()
     
    0.51
    875.00
               _________
        TOTAL     875.51
    
    DHC-APP>WRITE !,$JUSTIFY(0.1,"",2)
     
    0.10
    DHC-APP>WRITE !,$JUSTIFY(.1,"",2)
     
    0.10
    DHC-APP>WRITE !,$JUSTIFY(.1,"",3)
     
    0.100
    

    下面的示例使用$DOUBLEINFNAN执行数字右对齐:

    /// d ##class(PHA.TEST.Function).JUSTIFY3()
    ClassMethod JUSTIFY3()
    {
        SET rtn=##class(%SYSTEM.Process).IEEEError(0)
        SET x=$DOUBLE(1.2e500)
        WRITE !,"Double: ",x
        WRITE !,">",$JUSTIFY(x,12,2),"<"
        SET y=$DOUBLE(x-x)
        WRITE !,"Double INF minus INF: ",y
        WRITE !,">",$JUSTIFY(y,12,2),"<"
    }
    

    相关文章

      网友评论

          本文标题:第二十四章 Caché 函数大全 $JUSTIFY 函数

          本文链接:https://www.haomeiwen.com/subject/axpaektx.html