$JUSTIFY (ObjectScript)
構文
$JUSTIFY(expression,width,decimal)
$J(expression,width,decimal)
引数
引数 | 説明 |
---|---|
expression | 右寄せされる値。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。 |
width | 右寄せされる expression 内の文字数。正の整数、または正の整数に評価される式。 |
decimal | オプション — 小数桁数。 正の整数、または正の整数に評価される式。InterSystems IRIS は、expression 内の小数桁の数をこの値まで丸めるかパディングします。decimal を指定すると、InterSystems IRIS は expression を数値として扱います。 |
概要
$JUSTIFY は、指定した width 内で expression で指定した値を右寄せして返します。width 内で小数点を揃えるために、decimal 引数を使用できます。
-
$JUSTIFY(expression,width) : 引数が 2 つの構文では、expression を width 内で右寄せします。expression の変換は実行されません。expression には、数値、または非数値文字列を使用できます。
-
$JUSTIFY(expression,width,decimal) : 引数が 3 つの構文では、expression をキャノニック形式の数値に変換し、decimal まで小数桁を丸めるかゼロで埋めてから、結果となる数値を width 内で右寄せします。expression が非数値文字列の場合、InterSystems IRIS はそれを 0 に変換し、パディングしてから、右寄せします。
$JUSTIFY は、現在のロケールの DecimalSeparator 文字を認識します。必要に応じて DecimalSeparator 文字を追加または削除します。DecimalSeparator 文字はロケールによって異なります。一般に、米国形式のロケール用のピリオド (.) またはヨーロッパ形式のロケール用のコンマ (,) のどちらかです。ユーザのロケールの DecimalSeparator 文字を決定するには、以下のメソッドを呼び出します。
WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
一般に、$JUSTIFY は、小数桁がある数値を形式設定するために使用されます。すべての数値の小数桁数が同じになり、DecimalSeparator 文字が数値列内で揃うようにそれらの数値が右寄せされます。$JUSTIFY は、特に WRITE コマンドを使用してフォーマットされた値を出力するのに便利です。
引数
expression
右寄せする値 (任意で、指定された小数桁数の数値として表すことができる)。
-
文字列揃えが必要な場合は、decimal は指定しないでください。expression にはどの文字でも含めることができます。$JUSTIFY は、width で説明しているように expression を右寄せします。NULL 文字列 ("") を指定すると、指定した width の空白スペースの文字列を作成できます。
-
数値揃えが必要な場合は、decimal を指定します。decimal を指定すると、$JUSTIFY は expression をキャノニック形式の数値に変換します。それにより、先頭のプラス符号とマイナス符号が解決され、先頭および末尾のゼロが削除されます。それにより、最初の非数値文字列で expression が切り捨てられます。expression の先頭が非数値文字列 (通貨記号など) の場合、$JUSTIFY は expression の値を 0 に変換します。InterSystems IRIS での数値からキャノニック形式の数値への変換方法、InterSystems IRIS での非数値文字を含む数値文字列の扱い方の詳細は、"数値" を参照してください。
$JUSTIFY は、expression からキャノニック形式の数値への変換後に、width で説明しているように、このキャノニック形式の数値を decimal 小数桁数まで丸めるかゼロで埋めてから、その結果を右寄せします。$JUSTIFY では、NumericGroupSeparator 文字、通貨記号、複数の DecimalSeparator 文字、および末尾のプラス符号やマイナス符号は認識されません。
width
変換された expression を右寄せする width。width が expression の長さ (数値と小数桁の変換後) より長い場合、InterSystems IRIS は width まで右寄せし、必要に応じて空白スペースで左パディングします。width が expression の長さ (数値と小数桁の変換後) より短い場合、InterSystems IRIS は width を expression 値の長さに設定します。
width には、正の整数を指定します。width 値が 0、NULL 文字列 ('')、または非数値文字列の場合、width は 0 として扱われます。これは、InterSystems IRIS が width を expression 値の長さに設定することを意味します。
decimal
小数桁数。expression に含まれる小数桁が多い場合は、$JUSTIFY は小数部をこの数の小数桁まで丸めます。expression に含まれる小数桁が少ない場合は、$JUSTIFY は小数部をこの小数桁までゼロで埋めて、必要に応じて Decimal Separator 文字を追加します。decimal=0 の場合、$JUSTIFY は expression を整数値まで丸め、Decimal Separator 文字を削除します。
expression 値が 1 未満の場合、$JUSTIFY は DecimalSeparator 文字の前に 0 を挿入します。
$DOUBLE の INF 値、-INF 値、および NAN 値が、decimal 値には関係なく $JUSTIFY によって変更されずに返されます。
例
以下の例では、文字列に対して右寄せを実行します。数値変換は実行されません。
WRITE ">",$JUSTIFY("right",10),"<",!
WRITE ">",$JUSTIFY("aligned",10),"<",!
WRITE ">",$JUSTIFY("+0123.456",10),"<",!
WRITE ">",$JUSTIFY("string longer than width",10),"<",!
以下の例では、指定された小数桁数で数値の右寄せを実行します。
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)
以下の行を返します。
250.51 875.00 _______ TOTAL 1125.51
以下の例では、$DOUBLE 値の INF および NAN を使用して数値の右寄せを実行します。
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),"<"
$JUSTIFY および $FNUMBER
$FNUMBER を使用して、表示する数値の形式を設定できます。$JUSTIFY および $FNUMBER は、両方とも指定した小数桁まで丸めることができます (またはゼロで埋めることができます)。$FNUMBER は、NumericGroupSeparator 文字を追加するために使用することもできます。ただし、以下の点に注意してください。
-
数値が $JUSTIFY により右寄せされている場合、$FNUMBER でその数値の形式を設定できません($FNUMBER は、先頭のスペースを非数値文字として解釈します)。
-
NumericGroupSeparator 文字や通貨記号を追加した場合、$JUSTIFY で数値揃えを実行できません($JUSTIFY は、NumericGroupSeparators または通貨記号を非数値文字として解釈します)。
したがって、NumericGroupSeparators の追加、小数桁数の丸め、通貨記号の追加、および結果の数値の右寄せを適切に行うには、$FNUMBER を使用して、丸めおよび NumericGroupSeparators の挿入を行います。その後、$JUSTIFY を 2 引数構文で使用して、結果の文字列を右寄せします。
SET num=123456.789
SET fmtnum=$FNUMBER(num,",",2)
SET money="$"_fmtnum
SET rmoney=$JUSTIFY(money,15)
WRITE ">",rmoney,"<"