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

文章目录

第二十四章 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),"<"
}

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108571931
今日推荐