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

SUBTRACT

SUBTRACT ステートメントは、複数のオペランドの値を減算するために使用します。

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

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

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


機能

SUBTRACT ステートメントは、複数のオペランドの値を減算するために使用します。

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

Top of page

構文説明

構文 1 - SUBTRACT

SUBTRACT [ROUNDED] operand1 FROM operand2

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

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

構文要素の説明:

operand1 FROM operand2
オペランド:

operand1 は被減数、operand2 は減数です。したがって、ステートメントは次と等しくなります。

<oper2> := <oper2> - <oper1>

オペランドのフォーマットについては、「算術割り当てのルール」の「フォーマット混合式のパフォーマンスについて」(『プログラミングガイド』)も参照してください。

ROUNDED
切り上げ:

キーワード ROUNDED を指定すると、結果は切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。

構文 2

SUBTRACT [ROUNDED] operand1 FROM operand2 GIVING operand3

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

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

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

構文要素の説明:

GIVING
結果フィールド:

GIVING 節を使用すると、operand2 は変更されず、operand3 に結果が入ります。

operand1 FROM operand2 GIVING operand3
オペランド:

operand2 は被減数、operand1 は減数、operand3 は結果フィールドです。したがって、ステートメントは次と等しくなります。

<oper3> := <oper2>- <oper1>

オペランドのフォーマットについては、「フォーマット混合式のパフォーマンスについて」(『プログラミングガイド』)も参照してください。

ROUNDED
切り上げ:

キーワード ROUNDED を指定すると、結果は切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。

Top of page

** Example 'SUBEX1': SUBTRACT                                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (P2) INIT <50>                                                     
1 #B (P2)                                                               
1 #C (P1.1) INIT <2.4>                                                  
END-DEFINE                                                              
*                                                                       
SUBTRACT 6 FROM #A                                                   
WRITE NOTITLE 'SUBTRACT 6 FROM #A              '  10X '=' #A            
*                                                                       
SUBTRACT 6 FROM 11 GIVING #A                                         
WRITE         'SUBTRACT 6 FROM 11 GIVING #A    '  10X '=' #A            
*                                                                       
SUBTRACT 3 4 FROM #A GIVING #B                                        
WRITE         'SUBTRACT 3 4 FROM #A GIVING #B  '  10X '=' #A '=' #B     
*                                                                       
SUBTRACT -3 -4 FROM #A GIVING #B                                      
WRITE         'SUBTRACT -3 -4 FROM #A GIVING #B'  10X '=' #A '=' #B     
*                                                           
SUBTRACT ROUNDED 2.06 FROM #C                             
WRITE         'SUBTRACT ROUNDED 2.06 FROM #C   '  10X '=' #C
*                                                           
END                                                        

プログラム SUBEX1 の出力:

SUBTRACT 6 FROM #A                        #A:  44        
SUBTRACT 6 FROM 11 GIVING #A              #A:   5        
SUBTRACT 3 4 FROM #A GIVING #B            #A:   5 #B:  -2
SUBTRACT -3 -4 FROM #A GIVING #B          #A:   5 #B:  12
SUBTRACT ROUNDED 2.06 FROM #C             #C:  0.3      

Top of page