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?

ROUND

指定された桁で数値の丸めまたは切り捨てを行う数値関数。

Synopsis

ROUND(numeric-expr,scale[,flag])

{fn ROUND(numeric-expr,scale[,flag])}

引数

numeric-expr 丸められる数字。数値式。
scale 小数点からカウントして、どこまで丸めるかの桁数を指定する整数に評価される式。ゼロ、正の整数、または負の整数を指定できます。scale が小数の場合、最も近い整数に丸められます。
flag オプションnumeric-expr を丸めるか切り捨てるかを指定するブーリアン・フラグ。0 は丸め、1 は切り捨てです。既定は 0 です。

ROUND が返す値のデータ型は、numeric-exprデータ型と同じです。下記の "$DOUBLE の数値" を参照してください。

概要

この関数は、指定した小数桁数で数値の丸めまたは切り捨てを行うために使用できます。

ROUNDnumeric-expr に対して小数点から数えて scale の桁に丸めまたは切り捨てを行います。丸めるとき、5 は常に切り上げられます。末尾のゼロは、ROUND による丸めまたは切り捨て操作後に削除されます。先頭のゼロは返されません。

  • scale が正の数である場合、丸めは小数点から右に数えたその桁数で実行されます。scale が小数桁数以上の数である場合、丸めやゼロの埋め込みは実行されません。

  • scale がゼロの場合は、最も近い整数に丸められます。つまり、丸めが小数点の右側 0 桁目で実行され、すべての小数桁と小数点が削除されます。

  • scale が負の数である場合、丸めは小数点から左に数えたその桁数で実行されます。scale が丸めの結果の整数桁数以上である場合は、ゼロが返されます。

  • numeric-expr がゼロ (ただし 00.00 や -0 などのように表されている) 場合、ROUNDscale の値とは無関係に小数桁のない 0 (ゼロ) を返します。

  • numeric-expr または scale が NULL の場合、ROUND は NULL を返します。

ROUND の返り値は、末尾のゼロを削除して常に正規化されます。

ROUND、TRUNCATE、および $JUSTIFY

数値関数 ROUNDTRUNCATE の動作は似ています。両方とも小数桁または整数桁の有効桁数を減らすために使用できます。ROUND では、丸め (既定) または切り捨てを指定できます。TRUNCATE は丸めを行いません。ROUNDnumeric-expr と同じデータ型を返します。TRUNCATEnumeric-expr をデータ型 NUMERIC として返します。ただしこれは、numeric-expr がデータ型 DOUBLE でない場合に限ります。DOUBLE である場合は、データ型 DOUBLE を返します。

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

TRUNCATE では、指定された小数桁数への切り捨てを行います。切り捨てによって末尾にゼロが生じた場合、これらの末尾のゼロは保持されます。ただし、scalenumeric-expr のキャノニック形式の小数桁数より大きい場合、TRUNCATE はゼロパディングを行いません。

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

$DOUBLE の数値

$DOUBLE IEEE 浮動小数点数は、バイナリ表現でエンコードされます。ほとんどの 10 進数の小数は、このバイナリ表現では正確には表現できません。$DOUBLE 値が scale 値および丸め flag (flag=0、既定値) と共に ROUND に入力されると、10 進小数の結果がバイナリで表現できないため、返り値に scale で指定されているより多くの小数桁を含む場合がよくあります。したがって、返り値は、以下の例で示すように、表現可能な最も近い $DOUBLE 値に丸める必要があります。

  SET x=1234.5678
  SET y=$DOUBLE(1234.5678)
  &sql(SELECT ROUND(:x,2),ROUND(:y,2) INTO :decnum,:dblnum)
  WRITE "Decimal: ",x," rounded ",decnum,!
  WRITE "Double: ",y," rounded ",dblnum

ROUND を使用して $DOUBLE 値を切り捨てる場合 (flag=1)、$DOUBLE の返り値は、scale で指定された小数桁数に切り捨てられます。また TRUNCATE 関数は、$DOUBLEscale で指定された小数桁数に切り捨てます。

ROUND を使用して $DOUBLE 値を丸め、特定の scale を返す場合は、$DOUBLE 値を 10 進表現に変換してから結果を丸める必要があります。

ROUNDflag=0 (丸める、既定) に設定すると、$DOUBLE("INF")$DOUBLE("NAN") が空の文字列として返されます。

ROUNDflag=1 (切り捨てる) に設定すると、$DOUBLE("INF")$DOUBLE("NAN") が INF と NAN として返されます。

以下の例は、scale の 0 (ゼロ) を使用していくつかの小数を整数に丸めます。5 は常に切り上げられます。

SELECT ROUND(5.99,0) AS RoundUp,
       ROUND(5.5,0) AS Round5,
       {fn ROUND(5.329,0)} AS Roundoff

以下の例では、前の例と同じ小数を切り捨てます。

SELECT ROUND(5.99,0,1) AS Trunc1,
       ROUND(5.5,0,1) AS Trunc2,
       {fn ROUND(5.329,0,1)} AS Trunc3

以下の ROUND 関数は、負の小数の丸めと切り捨てを行います。

SELECT ROUND(-0.987,2,0) AS Round1,
       ROUND(-0.987,2,1) AS Trunc1

以下の例は、pi を小数桁数 4 に丸めます。

SELECT {fn PI()} AS ExactPi, ROUND({fn PI()},4) AS ApproxPi

以下の例は、小数桁数より大きな scale を指定しています。

SELECT {fn ROUND(654.98700,9)} AS Rounded

この場合は 654.987 が返されます (Caché が丸め処理を行う前に末尾のゼロを削除し、丸めもゼロの埋め込みも行われません)。

以下の例は、Salary の値を最も近い千ドルに丸めます。

SELECT Salary,ROUND(Salary, -3) AS PayBracket
FROM Sample.Employee
ORDER BY Salary

Salary が 500 ドルより少ない場合は 0 (ゼロ) に丸められることに注意してください。

以下の例では、各 ROUND で、丸められる桁数と同じか、それを超える負の scale が指定されています。

SELECT {fn ROUND(987,-3)} AS Round1,
       {fn ROUND(487,-3)} AS Round2,
       {fn ROUND(987,-4)} AS Round3,
       {fn ROUND(987,-5)} AS Round4

最初の ROUND 関数では、丸めの結果の桁数が scale より大きくなるため、1000 が返されます。これ以外の 3 つの ROUND 関数は 0 (ゼロ) を返します。

関連項目

FeedbackOpens in a new tab