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?

$FNUMBER

指定された形式で数値をフォーマットします。オプションで、指定された精度まで丸めるか、またはゼロで埋めます。

Synopsis

$FNUMBER(inumber,format,decimal)
$FN(inumber,format,decimal)

パラメータ

inumber フォーマットされる数値。数値リテラル、変数、数値に評価される有効な ObjectScript 式を指定できます。
format オプション — 数のフォーマット方法を指定します。任意の順序の 0 以上の形式コードで構成される引用符付きの文字列として指定されます。形式コードの詳細は後述します。一部の形式コードは互換性がなく、エラーが生じます。decimal パラメータの有無によらず、既定の形式には、空の文字列 ("") を指定できます。省略した場合、既定は空の文字列 ("") です。
decimal オプション — 返される数に含まれる小数桁数。format を省略する場合、decimal を指定する前にプレースホルダのコンマを入れます。

概要

$FNUMBER は、指定された format で、inumber により指定される数値を返します。

パラメータ

inumber

数値として評価する式。$FNUMBER が演算を実行する前に、Caché は、以下のように inumber に対して標準の数値解決を実行します。つまり、変数を解決し、連結などの文字列操作を実行し、文字列を数値に変換し、数値式演算を実行し、結果として得られた数値をキャノニック形式に変換します。これは、$FNUMBER がフォーマットする数値です。

inumber が文字列である場合、Caché ではまず数値に変換され、最初の非数値文字で切り捨てが行われます。文字列の最初の文字が非数値文字の場合、Caché は文字列を 0 に変換します。

format

利用可能な形式コードは、以下のとおりです。単独でも、組み合わせても指定できます。アルファベット・コードでは、大文字と小文字は区別されません。

コード 説明
"" 空の文字列。inumberキャノニック形式の数値で返します。この形式は、"L" 形式と同じです。
+ 現在のロケールの PlusSign プロパティを接頭語とした非負数を返します (既定は "+")。数が負のとき、現在のロケールの MinusSign プロパティを接頭語とした数を返します (既定は "-")。
- 数字の絶対値を返します。常に MinusSign 文字なしの負の数値を返します。PlusSign 文字なしの正の数値を返します。“+” 形式コードと組み合わせると ("-+")、正の数値はプラス記号付きで、負の数値は記号なしで返します。このコードは “P” 形式コードと一緒には使用できません。併用しようとすると、<SYNTAX> エラーが返されます。
, 現在のロケールの NumericGroupSeparator プロパティを、小数点の左側にある整数に NumericGroupSize ごとに入れた数値を返します。"," を "." または “N” と組み合わせた形式は、<FUNCTION> エラーになります。
. 現在のロケール設定に関係なく、標準的なヨーロッパ形式を使用して数字を返します。DecimalSeparator はコンマ (,)、NumericGroupSeparator はピリオド (.)、NumericGroupSize は 3、PlusSign はプラス記号 (+)、MinusSign はマイナス記号 (-) に設定されます。"." を "," または “O” と組み合わせた形式は、<FUNCTION> エラーになります。
D

$DOUBLE 特殊形式。このコードには以下の 2 つの効果があります。

“D” は、$DOUBLE(-0) が -0 を返すことを指定します。それ以外の場合、$DOUBLE(-0) は 0 を返します。ただし、“-D” は負符号を上書きし、0 を返します。

このコードでは、“D” または “d” を指定できます。返される INF または NAN は、これに対応して大文字または小文字で表されます。既定では大文字となります。

E E 記数法 (科学的記数法)。科学的記数法で数を返します。小数桁の decimal 数を省略すると、既定で 6 が使用されます。このコードでは、“E” または “e” を指定できます。返される値には、これに対応して大文字または小文字の記号が含まれます。返される値の指数部分は、指数に 3 桁を必要としない限り 2 桁の長さで、先頭に符号が付きます。"E" と "G" は互換性がなく、<FUNCTION> エラーになります。
G E 記数法または固定 10 進小数記数法。科学的記数法への変換の結果、小数桁数が decimal 値 (または既定の 6 小数桁) より大きくなる場合、数は科学的記数法で返されます。例えば、$FNUMBER(1234.99,"G",2) は 1.23E+03 を返します。科学的記数法への変換の結果、小数桁数が decimal 値 (または既定の 6 小数桁) と同じか小さくなる場合、数は固定 10 進小数記数法 (標準) で返されます。例えば、$FNUMBER(1234.99,"G",3) は 1235 を返します。このコードでは、“G” または “g” を指定できます。返される科学的記数法の値には、これに対応して大文字 “E” または小文字 “e” が含まれます。"E" と "G" は互換性がなく、<FUNCTION> エラーになります。
L 先行符号。符号がある場合、inumber の数字部分の前に置く必要があります。括弧は使用しません。このコードは “P”、または “T” 形式コードと共に使用できません。使用を試みると、<SYNTAX> エラーまたは <FUNCTION> エラーが返されます。先頭の符号が既定の形式です。
N NumericGroupSeparator なし。数値グループ・セパレータを使用できないようにします。この形式コードには、コンマ (,) 形式コードとの互換性がありません。ドット形式コード ("N.") と組み合わせて使用すると、数値は、ヨーロッパ式の小数点区切り文字を使用してフォーマットされますが、数値グループ・セパレータは使用されません。
O ODBC ロケール。現在のロケールをオーバーライドし、代わりに PlusSign=+、MinusSign=-、DecimalSeparator=.、NumericGroupSeparator=,、NumericGroupSize=3 の値で標準 ODBC ロケールを使用します。“O” 形式コードは、単独では、ODBC の MinusSign と DecimalSeparator のみを使用します。この形式コードにはドット (.) 形式コードとの互換性がありません。コンマ形式コード ("O,") と組み合わせて使用すると、数値は、ODBC の小数点区切り文字および ODBC の数値グループ・セパレータを使用してフォーマットされます。
P 括弧。MinusSign プロパティ値をつけずに、負の数を括弧付きで返します。その他の数は、括弧を付けずにスペース文字を両側に配置して返します。このコードは “+”、“-”、“L”、または “T” 形式コードと共に使用できません。使用を試みると、<SYNTAX> エラーが返されます。
T 後続符号。後に符号が続く数を返すか、あるいは接頭語が生成されます。しかし、必ずしも符号が付くわけではありません。非負数 (正数またはゼロ) の後に符号を加えるときは、“+” 形式コードも指定します。負数の後に符号を加えるときは、“-” 形式コードを指定しないでください。使用される符号はそれぞれ、現在のロケールの PlusSign プロパティと MinusSign プロパティで決まります。末尾スペース文字があるのに符号がないときは、"+" が省略されている非負数、あるいは "-" を指定した負の数の場合です。括弧は使用しません。このコードは “L”、または “P” 形式コードと共に使用できません。使用を試みると、<SYNTAX> エラーまたは <FUNCTION> エラーが返されます。

Caché では、1 未満の小数は、ゼロ整数なしの Caché キャノニック形式で表されます。0.66 は .66 になります。これが $FNUMBER の既定です。ただし、ほとんどの $FNUMBER format オプションは、先頭にゼロ整数を付けて 1 未満の小数を返します。つまり、.66 は、0.66 になります。format が "" (空の文字列)、"L" (空の文字列と同一機能)、および "D" の 2 パラメータ $FNUMBER は、1 未満の小数をキャノニック形式 (.66) で返します。その他すべての 2 パラメータ $FNUMBER format オプション、およびすべての 3 パラメータ $FNUMBER format オプションでは、先頭にゼロ整数を 1 つ付けて 1 未満の小数を返します。つまり、000.66 と .66 は両方とも 0.66 になります。これは JSON 数値の小数の形式です。

$DOUBLE 関数は、値 INF (無限大) および NAN (非数値) を返します。INF は負符号を取ります。形式コードは、INF が数であるかのように表します。例: +INFINF-(INF)。NAN は符号を取りません。NAN に影響を与える形式コードは “d” のみで、これにより NAN は小文字で返されます。“E” コードおよび “G” コードは、 INF および NAN の値には影響を与えません。

decimal

decimal パラメータは、返り値に含める小数桁の数を指定します。decimal には、正の整数、有効な ObjectScript 変数、または正の整数に評価される式を指定します。decimal が負の数の場合、Caché はこれを 0 として扱います。decimal が小数の場合、Caché はこれを切り捨てて整数部分のみにします。

  • decimalinumber の小数桁数よりも大きい場合は、0 で埋めます。

  • decimalinumber, の小数桁数よりも小さい場合、Caché は inumber を適切な小数桁数に丸めます。

  • decimal が 0 の場合、inumber は、小数点区切り文字なしの整数として返されます。Caché は inumber を適切な整数に丸めます。

inumber が 1 未満で、decimal が 0 より大きい場合、$FNUMBER は、format の値に関係なく、常に小数点区切り文字の前の整数の位置に 1 つのゼロを返します。小数のこの表示方法は Caché キャノニック形式と異なります。

decimal パラメータを指定すると、数の丸めを行った後に返す小数桁の数を制御できます。例えば、変数 c に数値 6.25198 が含まれているとします。

   SET c="6.25198"
   SET x=$FNUMBER(c,"+",3)
   SET y=$FNUMBER(c,"+",8)
   WRITE !,x,!,y

最初の $FNUMBER は +6.252 を、2 番目は +6.25198000 を返します。

以下の例は、異なる形式を指定すると、どのように $FNUMBER の動作に影響するかを示しています。これらの例は、現在のロケールが既定であると仮定した場合です。

以下の例では、符号コードの正の数への影響を示します。

   SET a=1234
   WRITE $FNUMBER(a),!      ; returns 1234
   WRITE $FNUMBER(a,""),!   ; returns 1234
   WRITE $FNUMBER(a,"+"),!  ; returns +1234
   WRITE $FNUMBER(a,"-"),!  ; returns 1234
   WRITE $FNUMBER(a,"L"),!  ; returns 1234
   WRITE $FNUMBER(a,"T"),!  ; returns 1234 (with a trailing space)
   WRITE $FNUMBER(a,"T+"),! ; returns 1234+

以下の例では、符号コードの負の数への影響を示します。

   SET b=-1234
   WRITE $FNUMBER(b,""),!  ; returns -1234
   WRITE $FNUMBER(b,"+"),! ; returns -1234
   WRITE $FNUMBER(b,"-"),! ; returns 1234
   WRITE $FNUMBER(b,"L"),! ; returns -1234
   WRITE $FNUMBER(b,"T"),! ; returns 1234-

以下の例では、“P” 形式コードの正および負の数への影響を示します。この例では、正の数が先頭と末尾の空白と共に返されることを示すため、数の前後にアスタリスクを記述しています。

  WRITE "*",$FNUMBER(-123,"P"),"*",!  ; returns *(123)*
  WRITE "*",$FNUMBER(123,"P"),"*",!   ; returns * 123 *

以下の例は 1,234,567.81 を返します。"," format は、アメリカ形式で x を返し、数値グループ・セパレータとしてコンマを、小数点区切り文字としてピリオドを挿入します。

   SET x=1234567.81
   WRITE $FNUMBER(x,",")

以下の例は 1.234.567,81 を返します。"." format は、ヨーロッパ形式で x を返し、数値グループ・セパレータとしてピリオドを、小数点区切り文字としてコンマを挿入します。

   SET x=1234567.81
   WRITE $FNUMBER(x,".")

以下の 3 パラメータの例は 124,329.00 を返します。$FNUMBER は、数値グループ・セパレータとしてコンマを挿入し、小数点区切り文字としてピリオドを追加し、x の値に小数桁として 2 つのゼロを付加します。

    SET x=124329
    WRITE $FNUMBER(x,",",2)

以下の 3 パラメータの例は 124329.00 を返します。省略した format はプレースホルダのコンマで表されます。decimal は、x の値に小数桁として 2 つのゼロを付加します。

    SET x=124329
    WRITE $FNUMBER(x,,2)

以下の 3 パラメータの例は 0.78 を返します。省略した format はプレースホルダのコンマで表されます。decimal は 2 小数桁に丸めます。また、decimal は、整数 0 を付加し、format の既定値をオーバーライドします。

    SET x=.7799
    WRITE $FNUMBER(x,,2)

メモ

小数点区切り文字

$FNUMBER は、返される数値の整数部分および小数部分の間の区切り文字として、現在のロケールの DecimalSeparator プロパティの値を使用します (既定は “.”)。“.” 形式コードが指定されると、現在のロケール設定に関係なくこの区切り文字は “,” です。

ユーザのロケールの DecimalSeparator 文字を決定するには、以下のように GetFormatItem()Opens in a new tab メソッドを呼び出します。

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

数値グループ・セパレータおよびサイズ

format の文字列が “,” を含む場合、$FNUMBER は、返される数値の整数桁のグループ間区切り文字として、現在のロケールの NumericGroupSeparator プロパティの値を使用します。これらのグループの大きさは、現在のロケールの NumericGroupSize プロパティによって決まります。

英語ロケールでは、既定でコンマ (“,”) が NumericGroupSeparator として、3 が NumericGroupSize として設定されます。多くのヨーロッパ言語のロケールでは、ピリオド (“.”) が NumericGroupSeparator として使用されます。ロシア語 (rusw)、ウクライナ語 (ukrw)、およびチェコ語 (csyw) ロケールでは、空白スペースが NumericGroupSeparator として使用されます。NumericGroupSize は、日本語を含め、すべてのロケールで既定で 3 に設定されます。(日本語のユーザについては、状況に応じて、整数を 3 桁単位で区切りたい場合もあれば、4 桁単位で区切りたい場合もあるかもしれません。)

format の文字列が “.” を含む場合 (かつ “N” を含まない場合)、$FNUMBER は現在のロケール設定に関係なく、NumericGroupSeparator=”.” および NumericGroupSize=3 を使用して、返り値をフォーマットします。

ユーザのロケールの NumericGroupSeparator 文字と NumericGroupSize 数を決定するには、以下のように GetFormatItem()Opens in a new tab メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("NumericGroupSeparator"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("NumericGroupSize")

プラス記号とマイナス記号

$FNUMBER は、現在のロケールに対する PlusSign プロパティおよび MinusSign プロパティ (既定では “+” と “-”) を使用します。“.” 形式コードが指定されると、これらの記号は、現在のロケールに関係なく、“+” と “-” に設定されます。

ユーザのロケールの PlusSign 文字および MinusSign 文字を決定するには、以下のように GetFormatItem()Opens in a new tab メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("PlusSign"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("MinusSign")

$FNUMBER と $INUMBER の相違点

大半の形式コードは、$FNUMBER$INUMBER で類似した意味を持ちますが、各コードによって引き起こされる正確な動作は、実行される検証と変換の性質により、関数によって異なります。

特に、$FNUMBER での “-” と “+” の形式コードは、$INUMBER の場合と同じ意味になるわけではありません。$FNUMBER で、"-" と "+" は相互排他的ではありません。"-" は (抑制することによって) MinusSign にのみ影響し、"+" は (挿入することによって) PlusSign にのみ影響します。$INUMBER では、"-" と "+" は相互排他的です。"-" は符号が許可されないという意味であり、"+" は符号が必ず必要であるという意味です。

関連項目

FeedbackOpens in a new tab