# La validation stricte des nombres (DISTOF vs ATOF) en AutoLISP

**URL:** https://dessein-tech.com/t/la-validation-stricte-des-nombres-distof-vs-atof-en-autolisp/9748
**Category:** AutoLISP
**Tags:** lisp, truc_astuce, programmation
**Created:** 2026-01-22T19:51:31Z
**Posts:** 1

## Post 1 by @Patrick — 2026-01-22T19:51:32Z

Beaucoup utilisent `atof` (Ascii TO Float) pour convertir du texte en nombre. C’est dangereux car `(atof "bonjour")` renvoie `0.0`.

L’expert utilise `distof`. Si la conversion échoue, il renvoie `nil`. C’est le seul moyen de distinguer une erreur d’une vraie valeur 0.

```
;; Mauvaise pratique
(if (= (atof saisie) 0.0) ... ) ;; Est-ce 0 ou une erreur ? On ne sait pas.

;; Bonne pratique
(if (distof saisie)
    (alert "C'est un nombre valide")
    (alert "Ceci n'est pas un nombre !")
)
```

La fonction **`distof`** signifie **DIS** tance **TO**  **F** loat.

C’est la version «&nbsp;intelligente&nbsp;» et «&nbsp;architecturale&nbsp;» de la conversion de texte en nombre. Contrairement à `atof` qui est une fonction mathématique brute (C standard), `distof` est une fonction purement AutoCAD® qui comprend les unités de dessin.

Voici pourquoi elle est indispensable.

### 1. La Syntaxe

```
(distof "chaine_texte" [mode])
```

- **«&nbsp;chaine\_texte&nbsp;»** : Le texte à convertir.

- **[mode]** _(Optionnel)_ : Un entier de 1 à 5 qui indique le format des unités (correspond à la variable système `LUNITS`).

### 2. Les deux super-pouvoirs de DISTOF

#### A. La validation d’entrée (Le retour `nil`)

C’est sa fonction principale pour un programmeur.

- `atof` renvoie `0.0` si le texte n’est pas un nombre (ex: «&nbsp;Bonjour&nbsp;»). C’est dangereux car on ne sait pas si l’utilisateur a tapé «&nbsp;0&nbsp;» ou une bêtise.

- `distof` renvoie **`nil`** si la conversion échoue.

```
(distof "12.5") ; Renvoie 12.5
(distof "Bonjour") ; Renvoie nil (Erreur détectée !)
```

#### B. La compréhension des formats impériaux (Pieds et Pouces)

Si vous travaillez avec des dessins anglo-saxons ou architecturaux, `atof` est inutile car il ne comprend pas les symboles `'` (pieds) et `"` (pouces). `distof` les calcule.

Exemple avec le mode 4 (Architectural) :

```
;; Convertit 1 pied et 6 pouces en unités décimales (18.0 pouces)
(distof "1'6\"" 4) ; Renvoie 18.0
```

### 3. Les Modes (Codes [LUNITS](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-D7C80D1F-B1C0-44A9-898E-B3100FF391CB))

Si vous ne spécifiez pas le mode, `distof` essaie d’interpréter le texte selon le réglage actuel du dessin. Pour forcer l’interprétation :

- **1** : Scientifique (ex: «&nbsp;1.55E+01&nbsp;»)

- **2** : Décimal (Le standard métrique)

- **3** : Ingénierie (Pieds/Pouces décimaux)

- **4** : Architectural (Pieds/Pouces fractionnaires ex: 1’-2 1/2")

- **5** : Fractionnaire (ex: 12 1/2)

### 4. Exemple concret de validation

Voici comment on l’utilise typiquement pour vérifier une saisie utilisateur :

```
(defun c:TestSaisie (/ saisie val)
  (setq saisie (getstring "\nEntrez une largeur : "))
  
  (if (setq val (distof saisie 2)) ;; On tente la conversion en décimal
    (alert (strcat "Validé ! La valeur est : " (rtos val)))
    (alert "Erreur : Ce n'est pas un nombre valide.")
  )
  (princ)
)
```

* * *
