# SUBTRACT

This document covers the following topics:

Belongs to Function Group: Arithmetic and Data Movement Operations

## Function

The `SUBTRACT` statement is used to subtract one or more arithmetic expressions or operands from another operand.

## Syntax 1 - SUBTRACT Statement without GIVING Clause

 `SUBTRACT` [`ROUNDED`]   `FROM` operand2

Operand Definition Table:

Operand Possible Structure Possible Formats Referencing Permitted Dynamic Definition
`operand1` C S A   N   N P I F   D T         yes no
`operand2`   S A   M   N P I F   D T         yes no

Syntax Element Description:

Syntax Element Description
`arithmetic-expression` See Arithmetic Expression in the `COMPUTE` statement.

`operand1`
```FROM operand2 ```

Operands:

`operand2` is the minuend, `operand1` is the subtrahend, hence the statement is equivalent to:

```operand2 := operand2 - operand1```

As for the formats of the operands, see also Rules for Arithmetic Assignments, Performance Considerations for Mixed Formats in the Programming Guide.

`ROUNDED`
ROUNDED Option:

If you specify the keyword `ROUNDED`, the result will be rounded.

For information on rounding, see Rules for Arithmetic Assignment, Field Truncation and Field Rounding in the Programming Guide.

## Syntax 2 - SUBTRACT Statement with GIVING Clause

 `SUBTRACT` [`ROUNDED`]   `FROM`  `GIVING` operand3

Operand Definition Table:

Operand Possible Structure Possible Formats Referencing Permitted Dynamic Definition
`operand1` C S A   N     N P I F   D T         yes no
`operand2` C S A   N     N P I F   D T         yes no
`operand3`   S A   M A U N P I F B* D T         yes yes

* Format B of `operand3` may be used only with a length of less than or equal to 4.

Syntax Element Description:

Syntax Element Description
`arithmetic-expression` See Arithmetic Expression in the `COMPUTE` statement.
`GIVING`
GIVING Clause:

When the `GIVING` clause is used, `operand2` will not be modified, and the result will be stored in `operand3`.

`operand1`
```FROM operand2```
```GIVING operand3```

Operands:

`operand2` is the minuend, `operand1` is the subtrahend, `operand3` is the result field, hence the statement is equivalent to:

```operand3 := operand2 - operand1```

As for the formats of the operands, see also the section Performance Considerations for Mixed Formats in the Programming Guide.

`ROUNDED`
ROUNDED Option:

If you specify the keyword `ROUNDED`, the result will be rounded.

For information on rounding, see Rules for Arithmetic Assignment, Field Truncation and Field Rounding in the Programming Guide.

## Example

```** 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```

#### Output of Program 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```