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

2020-09-14  本文已影响0人  Cache技术分享

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

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

大纲

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

参数

描述

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

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

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

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

参数

expression

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

$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字符。但是,请注意以下几点:

因此,要正确添加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),"<"
}
上一篇下一篇

猜你喜欢

热点阅读