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