Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$JUSTIFY

指定された幅の範囲内で値を右に寄せる関数です。オプションで、指定された小数桁数に丸めます。

Synopsis

$JUSTIFY(expression,width[,decimal])

引数

expression 右寄せされる値。数値、文字列リテラル、または数値か文字列に解決する式のいずれかにできます。
width 右寄せされる expression 内の文字数。正の整数、または正の整数に評価される式です。
decimal オプション — 小数桁数。 正の整数、または正の整数に評価される式です。Caché は、expression 内の小数桁の数を丸めるかパディングします。decimal を指定すると、Caché は expression を数値として扱います。

概要

$JUSTIFY は、指定した width 内で expression で指定した値を右寄せして返します。width 内で小数点を揃えるために、decimal 引数を使用できます。

  • $JUSTIFY(expression,width):引数が 2 つの構文では、expressionwidth 内で右寄せします。expression の変換は実行されません。expression には、数値、または非数値文字列を使用できます。

  • $JUSTIFY(expression,width,decimal):引数が 3 つの構文では、expressionキャノニック形式の数値に変換し、decimal まで小数桁を丸めるかゼロで埋めてから、結果となる数値を width 内で右寄せします。expression が非数値文字列または NULL の場合、Caché はそれを 0 に変換し、パディングしてから、右寄せします。

SQLCODE -380 は、指定した引数が少なすぎる場合に発行されます。SQLCODE -381 は、指定した引数が多すぎる場合に発行されます。

$JUSTIFY は、現在のロケールのための DecimalSeparator 文字を認識します。必要に応じて DecimalSeparator 文字を追加または削除します。DecimalSeparator 文字はロケールによって異なります。一般に、米国形式のロケール用のピリオドかヨーロッパ形式のロケール用のコンマ (,) のどちらかとなります。ユーザのロケールの DecimalSeparator 文字を決定するには、以下のメソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")

$JUSTIFY、ROUND、および TRUNCATE

固定の小数桁数への丸めが重要な場合、例えば金額を表す場合などは、$JUSTIFY を使用します。これは、丸め処理の後に指定された数の末尾のゼロを返します。decimalexpression の小数桁数より大きい場合、$JUSTIFY はゼロパディングを行います。また $JUSTIFY では、DecimalSeparator 文字が数値列内で揃うように数値が右寄せされます。

また ROUND では、指定された小数桁数への丸めを行いますが、その戻り値は常に正規化され、末尾のゼロが削除されます。例えば、ROUND(10.004,2) は 10.00 ではなく 10 を返します。$JUSTIFY とは異なり、ROUND では、丸め (既定) または切り捨てを指定できます。

TRUNCATE では、指定された小数桁数への切り捨てを行います。ROUND とは異なり、切り捨てによって末尾にゼロが生じた場合、これらの末尾のゼロは保持されます。ただし、$JUSTIFY とは異なり、TRUNCATE はゼロパディングを行いません。

ROUND および TRUNCATE では、小数点記号の左に丸める (または切り捨てる) ことができます。例えば、ROUND(128.5,-1) は 130 を返します。

$JUSTIFY および LPAD

引数が 2 つの形式の LPADおよび引数が 2 つの形式の $JUSTIFY はどちらも、先頭にスペースを使用してパディングすることで文字列を右寄せします。引数が 2 つのこれらの形式の違いは、入力 expression の長さより短い出力 width の扱い方です。LPAD は、指定された出力長に合わせて入力文字列を切り捨てます。$JUSTIFY は、入力文字列に合わせて出力長を拡大します。詳細は、以下の例を参照してください。

SELECT '>'||LPAD(12345,10)||'<' AS lpadplus,
       '>'||$JUSTIFY(12345,10)||'<' AS justifyplus,
       '>'||LPAD(12345,3)||'<' AS lpadminus,
       '>'||$JUSTIFY(12345,3)||'<' AS justifyminus

引数が 3 つの形式の LPAD では、スペース以外の文字での左パディングが可能です。

引数

expression

右寄せする値 (任意で、指定された小数桁数の数値として表します)。

  • 文字列揃えが必要は場合は、decimal は指定しないでください。expression にはどの文字でも含めることができます。$JUSTIFY は、"width" で説明しているように expression を右寄せします。

  • 数値揃えが必要は場合は、decimal を指定します。decimal が指定されている場合、Caché は expression$JUSTIFYキャノニック形式の数値として提供します。先頭のプラス符号とマイナス符号を解決し、先頭および末尾のゼロを削除します。最初の非数値文字列で expression を切り捨てます。expression の先頭が非数値文字列 (通貨記号など) の場合、Caché は expression の値を 0 に変換します。キャノニック形式への変換では、NumericGroupSeparator 文字、通貨記号、複数の DecimalSeparator 文字、または末尾のプラス符号やマイナス符号を認識しません。Caché での数値からキャノニック形式の数値への変換方法、Caché での非数値文字を含む数値文字列の扱い方の詳細は、"Caché ObjectScript の使用法" の “データ型とデータ値” の章の "数値" のセクションを参照してください。

    $JUSTIFYexpression をキャノニック形式の数値として受け取った後、$JUSTIFY はその演算を実行し、"width" で説明しているように、このキャノニック形式の数値を decimal 小数桁数まで丸めるかゼロでパディングしてから、その結果を右寄せします。

width

変換された expression を右寄せする widthwidthexpression の長さ (数値と小数桁の変換後) より長い場合、Caché は width まで右寄せし、必要に応じて空白スペースで左パディングします。widthexpression の長さ (数値と小数桁の変換後) より短い場合、Caché は widthexpression 値の長さに設定します。

width には、正の整数を指定します。width 値 0、空文字列 ('')、NULL、または非数値文字列では、width は 0 として扱われます。これは、Caché が widthexpression 値の長さに設定することを意味します。

decimal

小数桁数。expression に含まれる小数桁が多い場合は、$JUSTIFY は小数部をこの数の小数桁まで丸めます。expression に含まれる小数桁が少ない場合、$JUSTIFY は小数部をこの小数桁までゼロでパディングして、必要に応じて Decimal Separator 文字を追加します。decimal=0 の場合、$JUSTIFYexpression を整数値まで丸め、Decimal Separator 文字を削除します。

expression 値が 1 未満の場合、$JUSTIFY は DecimalSeparator 文字の前に 0 を挿入します。

$DOUBLE の INF 値、-INF 値、および NAN 値は、decimal 値には関係なく $JUSTIFY によって変更されることなく返されます。

以下のダイナミック SQL の例では、文字列に右寄せを実行します。数値変換は実行されません。

  ZNSPACE "SAMPLES"
  SET myquery = "SELECT TOP 20 Age,$JUSTIFY(Name,18),DOB FROM Sample.Person"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()
  WRITE !,"End of data"

以下のダイナミック SQL の例では、指定された小数桁数で数値の右寄せを実行します。

  ZNSPACE "SAMPLES"
  SET myquery = 2
  SET myquery(1) = "SELECT TOP 20 $JUSTIFY(Salary,10,2) AS FullSalary,"
  SET myquery(2) = "$JUSTIFY(Salary/7,10,2) AS SeventhSalary FROM Sample.Employee"
   SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()
  WRITE !,"End of data"

以下のダイナミック SQL の例では、指定された小数桁数での数値の右寄せと、同じ数値の文字列の右寄せを実行します。

  SET myquery = 2
  SET myquery(1) = "SELECT $JUSTIFY({fn ACOS(-1)},8,3) AS ArcCos3,"
  SET myquery(2) = "$JUSTIFY({fn ACOS(-1)},8) AS ArcCosAll"
   SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()

以下のダイナミック SQL の例では、$DOUBLE 値の INF および NAN を使用して数値の右寄せを実行します。

  DO ##class(%SYSTEM.Process).IEEEError(0)
  SET x=$DOUBLE(1.2e500)
  SET y=x-x
  SET myquery = 2
  SET myquery(1) = "SELECT $JUSTIFY(?,12,2) AS INFtest,"
  SET myquery(2) = "$JUSTIFY(?,12,2) AS NANtest"
   SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute(x,y)
  DO rset.%Display()

関連項目

FeedbackOpens in a new tab