バージョン 6.3.3
 —  ステートメント  —

DIVIDE

このドキュメントでは、次のトピックについて説明します。

関連ステートメント:ADD | COMPRESS | COMPUTE | EXAMINE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT

関連機能グループ:「算術演算とデータ移動操作


機能

DIVIDE ステートメントは、2 つのオペランドを除算するために使用します。

注意:
ゼロによる除算に関する注意事項:"0" になっている除数(operand1)を使用しようとすると、エラーメッセージまたは結果として "0" が返されます。いずれが返されるかは、セッションパラメータ ZD の設定によって決まります(詳細については、『パラメータリファレンス』ドキュメントを参照)。

Top of page

構文説明

このステートメントには異なる構造が可能です。

構文 1 - DIVIDE(GIVING 節を含まない場合)

DIVIDE [ROUNDEDoperand1 INTO operand2

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S A   N   N P I F               不可
operand2 C S A   M   N P I F               不可

構文要素の説明:

operand1 INTO operand2
オペランド:

operand1 は除数で、operand2 は被除数です。 結果は operand2(結果フィールド)に格納されるため、ステートメントは次の式と同等になります。

<oper2> := <oper2> / <oper1>

結果フィールドとして使用できるのは、データベースフィールドまたはユーザー定義変数です。 operand2 が定数または変更不可の Natural システム変数の場合は、GIVING 節が必要です。 除算の結果の小数点位置は、結果フィールド(つまり、operand2)から計算されます。

ROUNDED キーワード ROUNDED を指定すると、結果は切り上げられます。

構文 2 - DIVIDE(GIVING 節を含む場合)

DIVIDE [ROUNDEDoperand1 INTO operand2  [GIVING operand3]

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S A   N     N P I F               不可
operand2 C S A   N     N P I F               不可
operand3   S A     A U N P I F B*            

*operand3 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

operand1 INTO operand2 GIVING operand3
オペランド:

operand1 は除数で、operand2 は被除数です。結果は operand3 に格納されるため、ステートメントは次の式と同等になります。

<oper3> := <oper2> / <oper1>

結果フィールドとしてデータベースフィールドを使用している場合は、除算の結果により更新されるのはプログラム内で使用されるフィールドの内部値のみです。 データベース内のフィールドの値は変更されないまま維持されます。

除算の結果の小数点位置は、結果フィールド(つまり、operand3)から計算されます。

結果の精度については、『プログラミングガイド』の「演算割り当てのルール」、「算術演算結果の精度」を参照してください。

ROUNDED キーワード ROUNDED を指定すると、結果は切り上げられます。

構文 3 - DIVIDE(REMAINDER オプションを含む場合)

DIVIDE operand1  INTO operand2  [GIVING operand3] REMAINDER operand4

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S A   N     N P I                 不可
operand2 C S A   N     N P I                 不可
operand3   S A     A U N P I F B*            
operand4   S A     A U N P I F B*    T        

* operand3 および operand4 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

operand1
除数:

operand1 は除数、つまり割り算の商を求めるために被除数を割る数値または量のことです。

operand2
結果フィールド:

GIVING 節を使用しない場合は、operand2 に結果が格納されます。 結果フィールドとして使用できるのは、データベースフィールドまたはユーザー定義変数です。

operand2 が定数または変更不可の Natural システム変数の場合は、GIVING 節が必要です。

ROUNDED

キーワード ROUNDED を指定すると、結果は切り上げられます。

GIVING operand3

キーワード GIVING を使用すると、operand2 は変更されず、operand3 に結果が格納されます。

結果フィールドとしてデータベースフィールドを使用している場合は、除算の結果により更新されるのはプログラム内で使用されるフィールドの内部値のみです。 データベース内のフィールドの値は変更されないまま維持されます。

除算結果の小数桁数は、結果フィールド(つまり GIVING 節を使用している場合は operand2GIVING 節を使用していない場合は operand3)で評価されます。

結果の精度については、『プログラミングガイド』の「演算割り当てのルール」、「算術演算結果の精度」を参照してください。

REMAINDER operand4

キーワード REMAINDER を指定すると、除算の余りが指定フィールド(operand4)に挿入されます。

GIVING REMAINDER を併用する場合、4 つのオペランドに配列範囲を使用することはできません。

余りは、内部的に次のように計算されます。

  1. operand1operand2 の除算の商が計算されます。

  2. 商は operand1 と掛け合わされます。

  3. この乗算の結果が operand2 から引かれます。

  4. この減算の結果は、operand4 に割り当てられます。

これらの各ステップにおいて、「算術演算結果の精度」(『プログラミングガイド』)で説明されている規則が適用されます。

Top of page

** Example 'DIVEX1': DIVIDE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (N7) INIT <20>                                                     
1 #B (N7)                                                               
1 #C (N3.2)                                                             
1 #D (N1)                                                               
1 #E (N1) INIT <3>                                                      
1 #F (N1)                                                               
END-DEFINE                                                              
*                                                                       
DIVIDE 5 INTO #A                                                      
WRITE NOTITLE 'DIVIDE 5 INTO #A' 20X '=' #A                             
*                                                                       
RESET INITIAL #A                                                        
DIVIDE 5 INTO #A GIVING #B                                          
WRITE 'DIVIDE 5 INTO #A GIVING #B' 10X '=' #B                           
*                                                                       
DIVIDE 3 INTO 3.10 GIVING #C
WRITE 'DIVIDE 3 INTO 3.10 GIVING #C' 8X '=' #C        
*                                                     
DIVIDE 3 INTO 3.1 GIVING #D                     
WRITE 'DIVIDE 3 INTO 3.1 GIVING #D' 9X '=' #D         
*                                                     
DIVIDE 2 INTO #E REMAINDER #F                    
WRITE 'DIVIDE 2 INTO #E REMAINDER #F' 7X '=' #E '=' #F
*                                                     
END

プログラム DIVEX1 の出力:

DIVIDE 5 INTO #A                    #A:        4 
DIVIDE 5 INTO #A GIVING #B          #B:        4 
DIVIDE 3 INTO 3.10 GIVING #C        #C:    1.03  
DIVIDE 3 INTO 3.1 GIVING #D         #D:  1       
DIVIDE 2 INTO #E REMAINDER #F       #E:  1 #F:  1

Top of page