文章目录
第二十四章 Caché 函数大全 $JUSTIFY 函数 - 大纲
-
- 参数
- 描述
- 参数
-
- expression
- width
- decimal
- `$JUSTIFY`和`$FNUMBER`
- 示例
在指定宽度内右对齐表达式,四舍五入到指定的小数位数。
大纲$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,则$JUSTIFY在DecimalSeparator字符之前插入前导零。
$DOUBLE值INF,-INF和NAN由$JUSTIFY不变地返回,而与十进制值无关。
$JUSTIFY和$FNUMBER可以使用$FNUMBER格式化显示的数字。 $JUSTIFY和$FNUMBER都可以四舍五入(或零填充)到指定的小数位数。 $FNUMBER也可用于添加NumericGroupSeparator字符。但是,请注意以下几点:
- 使用$JUSTIFY将数字右对齐后,$FNUMBER无法格式化数字。 ($FNUMBER将前导空格解释为非数字字符。)
- 一旦添加了NumericGroupSeparator字符或在货币符号前加了$JUSTIFY,就不能对数字进行数字对齐。 ($JUSTIFY将NumericGroupSeparators或货币符号解释为非数字字符。)
因此,要正确添加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
下面的示例使用$DOUBLE值INF和NAN执行数字右对齐:
/// 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),"<" }