第24章Caché関数コレクション$ JUSTIFY関数
指定した幅内で式を右に揃え、指定した小数点以下の桁数に丸めます。
概要
$JUSTIFY(expression,width,decimal)
$J(expression,width,decimal)
パラメータ
- 式右寄せする値。数値、文字列リテラル、変数名、または任意の有効なObjectScript式を使用できます。
- 幅式で右揃えされる文字数。正の整数、または結果が正の整数となる式。
- decimalオプション-小数点以下の桁数。正の整数、または結果が正の整数となる式。Cachéは、式の小数点以下の桁数をこの値に丸めるか、埋めます。指定した場合
DECIMAL
、Cachéは式を数値として扱います。
解説
$JUSTIFY
指定した幅内で右揃えされた式で指定された値を返します。DECIMALパラメータを含めて、小数を幅に揃えることができます。
- $ JUSTIFY(式、幅):2パラメーター構文は、幅内で右揃えの式です。式の変換は行いません。式には、数値または数値以外の文字列を指定できます。
- $ JUSTIFY(式、幅、10進数):3パラメーターの構文は、式を正規の数値に変換し、小数点以下の丸めまたはゼロの小数点以下を10進数に変換し、結果の値を幅内で右揃えします。式が非数値文字列の場合、Cachéはそれを0に変換し、パディングしてから右揃えします。
$JUSTIFY
現在のロケールのDecimalSeparator
文字を識別します。必要に応じてDecimalSeparator
文字を追加または削除します。DecimalSeparator
文字はロケールに依存します。通常、US形式のロケールの。
場合はピリオド(,
)、ヨーロッパ形式のロケールの場合はコンマ()です。ロケールのDecimalSeparator
文字を判別するには、次のメソッドを呼び出します。
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
.
通常、これは$JUSTIFY
小数点以下の桁数を使用して数値をフォーマットするために使用されます。各数値は小数点以下の桁数が同じであり、数字はDecimalSeparator
文字が数値列に配置されるように右揃えされます。コマンド$JUSTIFY
を使用してWRITE
フォーマットされた値を出力する場合に特に便利です。
パラメータ
表情
右寄せされる値は、オプションで、小数点以下の桁数を指定した数値として表すことができます。
- 文字列の配置が必要な場合は、小数を指定しないでください。式には任意の文字を含めることができます。
$JUSTIFY
幅で説明されているように、式を右揃えにします。空の文字列(“”
)を指定して、指定した幅の空の文字列を作成できます。 - 数値を揃える必要がある場合は、小数を指定してください。小数が指定されている場合、
$JUSTIFY
表現を調整するためにデジタルに変換します。先頭の符号を解析し、先頭と末尾のゼロを削除します。最初の数字以外の文字で式を切り捨てます。$
先頭に数字以外の文字(例:通貨記号)$JUSTIFY
の式がある場合、式の値0に変換されます。
$JUSTIFY
式が正規数に変換された後、正規数はゼロで埋められるか、小数点以下の桁数で丸められ、幅で説明されているように結果が右揃えされます。$JUSTIFY
認識されないNumericGroupSeparator
文字、通貨の$記号、複数のDecimalSeparator
文字、末尾のプラス記号またはマイナス記号。
幅
変換された式の幅を右揃えにします。幅が式の長さより大きい場合(数値と小数点以下の桁数が変換された後)、Cachéは幅を右に揃え、必要に応じて左を空白で埋めます。幅が式の長さよりも小さい場合(数値と小数点以下の桁数が変換された後)、Cachéは幅を式の値の長さに設定します。
幅を正の整数として指定します。幅の値0、空の文字列(“”
)、または数値以外の文字列は、幅0と見なされます。つまり、Cachéは幅を式の値の長さに設定します。
小数
小数点以下の桁数。式に小数点以下の桁数が含まれている場合、$JUSTIFY
小数部分は小数点以下の桁数に丸められます。式に含まれる小数点以下の桁数が少ない場合、$JUSTIFY
小数部分はゼロで埋められ、必要に応じて小数点が追加されます。= 0 10進数の場合$JUSTIFY
、式は整数値に丸められ、小数点記号は削除されます。
式の値以下であれば1より、文字の前に先行ゼロを挿入します。$JUSTIFY
DecimalSeparator
$DOUBLE
値INF
、-INF
および10進数の値に関係なく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),"<"
}