このドキュメントでは、次のトピックについて説明します。
関連ステートメント:ADD | COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | RESET | SEPARATE | SUBTRACT
関連機能グループ:算術演算とデータ移動操作
MULTIPLY ステートメントは、2 つのオペランドを乗算するために使用します。使用される構文に応じて、乗算結果は operand1 または operand3 に入ります。
データベースフィールドを結果フィールドとして使用するとき、MULTIPLY 演算は、プログラム内で使用したフィールドの内部値だけを更新します。データベース内のフィールドの値は変更されないまま維持されます。
配列を含む乗算については、『プログラミングガイド』の「算術演算の規則」、「配列での算術演算」も参照してください。
このステートメントには、2 つの異なる構造が可能です。
構文 1 が使用される場合、乗算の結果は operand1 に入ります。
MULTIPLY [ROUNDED] operand1 BY |
|
|
||
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル:
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
S | A | M | N | P | I | F | ○ | × | ||||||||||
operand2 |
C | S | A | N | N | P | I | F | ○ | × | |||||||||
構文要素の説明:
| 構文要素 | 説明 |
|---|---|
arithmetic-expression |
COMPUTE ステートメントの「算術演算式」も参照してください。
|
operand1 BY
operand2 |
オペランド:
結果は operand1 := operand1 * operand2 |
ROUNDED |
ROUNDED オプション:
キーワード 四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。 |
構文 2 が使用される場合、乗算の結果は operand3 に入ります。
MULTIPLY [ROUNDED] |
|
|
BY |
|
|
GIVINGoperand3 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル:
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | A | M | N | P | I | F | ○ | × | ||||||||||
operand2 |
C | S | A | N | N | P | I | F | ○ | × | ||||||||||
operand3 |
S | A | M | A | U | N | P | I | F | B * | T | ○ | ○ | |||||||
* operand3 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明:
| 構文要素 | 説明 |
|---|---|
arithmetic-expression |
COMPUTE ステートメントの「算術演算式」も参照してください。
|
operand1 BY
operand2 GIVING
operand3 |
オペランド:
operand3 := operand1 * operand2 |
ROUNDED |
ROUNDED オプション:
キーワード 四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。 |
** Example 'MULEX1': MULTIPLY
************************************************************************
DEFINE DATA LOCAL
1 #A (N3) INIT <20>
1 #B (N5)
1 #C (N3.1)
1 #D (N2)
1 #ARRAY1 (N5/1:4,1:4) INIT (2,*) <5>
1 #ARRAY2 (N5/1:4,1:4) INIT (4,*) <10>
END-DEFINE
*
MULTIPLY #A BY 3
WRITE NOTITLE 'MULTIPLY #A BY 3' 25X '=' #A
*
MULTIPLY #A BY 3 GIVING #B
WRITE 'MULTIPLY #A BY 3 GIVING #B' 15X '=' #B
*
MULTIPLY ROUNDED 3 BY 3.5 GIVING #C
WRITE 'MULTIPLY ROUNDED 3 BY 3.5 GIVING #C' 6X '=' #C
*
MULTIPLY 3 BY -4 GIVING #D
WRITE 'MULTIPLY 3 BY -4 GIVING #D' 14X '=' #D
*
MULTIPLY -3 BY -4 GIVING #D
WRITE 'MULTIPLY -3 BY -4 GIVING #D' 14X '=' #D
*
MULTIPLY 3 BY 0 GIVING #D
WRITE 'MULTIPLY 3 BY 0 GIVING #D' 14X '=' #D
*
WRITE / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)
MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)
WRITE / 'MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)'
/ '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)
*
END
MULTIPLY #A BY 3 #A: 60
MULTIPLY #A BY 3 GIVING #B #B: 180
MULTIPLY ROUNDED 3 BY 3.5 GIVING #C #C: 10.5
MULTIPLY 3 BY -4 GIVING #D #D: -12
MULTIPLY -3 BY -4 GIVING #D #D: 12
MULTIPLY 3 BY 0 GIVING #D #D: 0
#ARRAY1: 5 5 5 5 #ARRAY2: 10 10 10 10
MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)
#ARRAY1: 50 50 50 50 #ARRAY2: 10 10 10 10