Les nombres signés en COBOL

Les nombres signés en COBOL – PIC S9

En une phrase :
Quand vous mettez un S devant le 9, la variable peut être négative (ex. -125, -0.75) ou positive.
Sans S, elle est toujours positive ou zéro.

Exemple 1 – Solde de compte (le plus courant)

01  SOLDE               PIC S9(7)V99 COMP-3.
            

Peut contenir :
• +12 345.67
• - 987.50
• 0.00

Exemple 2 – Montant d’une opération

01  MONTANT-OPERATION   PIC S9(5)V99.
            

Valeurs possibles :
12 345.67
- 500.00
+ 0.01
- 0.00 (possible, mais rare)

Exemple 3 – Différence entre PIC 9 et PIC S9

01  CREDIT              PIC 9(6)V99.      *> toujours positif ou zéro
01  DEBIT               PIC S9(6)V99.     *> peut être négatif
            

MOVE -250.75 TO CREDIT → devient +250.75 (le signe est perdu !)
MOVE -250.75 TO DEBIT → reste -250.75

Exemple 4 – Très petit nombre décimal négatif

01  TAUX-PENALITE       PIC S9V999 VALUE -0.075.
            

→ Valeur interne : -075 (virgule implicite)
→ Affichage possible : -0.075

Exemple 5 – Compteur qui peut diminuer

01  STOCK-RESTANT       PIC S9(5) COMP VALUE +1200.
            

Peut passer à :
+1200 → +800 → +300 → -50 (découvert autorisé)

La règle à retenir (très simple) :
• Vous voulez pouvoir mettre un nombre négatif ? → mettez S
• Vous êtes sûr que ce sera toujours positif ou zéro ? → pas de S

Petit rappel important :
Le S ne prend pas de place supplémentaire en mémoire dans la plupart des formats (COMP-3, COMP). Il est stocké dans un demi-octet ou un bit de signe.