💻 DéveloppementIntermédiaire PS 1.6 PS 1.7 PS 8.x

Arrondir un prix en Smarty dans PrestaShop : ceil, round et math

Comment arrondir correctement un prix HT en Smarty dans PrestaShop : fonctions round, ceil, floor et l'astuce math equation pour un arrondi au centime supérieur.

En bref : Pour arrondir un prix au centime supérieur en Smarty, utilisez {math equation='ceil(a*100)/100' a=$variable}. En PrestaShop 8.x, préférez Tools::ps_round() côté PHP avec la constante PS_ROUND_UP pour respecter les règles d'arrondi de la boutique.

Publié le 21 mars 2026 4 min de lecture Alexandre Carette

Le problème : afficher un prix HT arrondi correctement en Smarty

Lorsqu'on calcule un prix hors taxes directement dans un template Smarty — par exemple en divisant un prix TTC par 1,2 pour retrouver le montant HT — on obtient souvent un résultat avec de nombreuses décimales.

Prenons un cas concret : un produit à 5,44 € TTC. En divisant par 1,2, Smarty affiche 4.5333333333333 € HT. Ce n'est évidemment pas présentable pour le client.

La question est alors : comment arrondir proprement ce montant, et surtout, comment obtenir un arrondi au centime supérieur plutôt qu'un arrondi classique ?

Les modificateurs d'arrondi disponibles en Smarty

Le modificateur `round` : arrondi mathématique standard

Smarty expose le modificateur round qui correspond à la fonction PHP round(). Il arrondit au plus proche :


{$total_without_taxes|round:2}

Avec une valeur de 4.5333, le résultat sera 4.53 — arrondi au centime le plus proche, vers le bas dans ce cas.

Le modificateur `ceil` : arrondi à l'entier supérieur

Le modificateur ceil arrondit à l'entier supérieur :


{$total_without_taxes|ceil}

Avec 4.5333, le résultat sera 5 — ce qui n'est pas non plus ce qu'on veut pour un prix au centime près.

Le modificateur `floor` : arrondi à l'entier inférieur

Pour mémoire, floor fait l'inverse de ceil :


{$total_without_taxes|floor}

Avec 4.5333, le résultat sera 4.

La solution : combiner `{math}` et `ceil` pour arrondir au centime supérieur

Aucun modificateur Smarty natif ne permet directement d'arrondir au centime supérieur. L'astuce consiste à utiliser la fonction {math} avec ceil() dans l'équation :


{math equation='ceil(a/1.2*100)/100' a=$prices.$ipa assign='total_without_taxes'}
<strong>{$total_without_taxes} € HT</strong>

Décortiquons cette formule

ÉtapeOpérationRésultat 1`a / 1.2`4.5333... 2`× 100`453.33... 3`ceil(...)`454 4`/ 100`**4.54**

Le principe est simple : on multiplie par 100 pour décaler les centimes en position entière, on applique ceil() pour arrondir vers le haut, puis on divise par 100 pour remettre le nombre à l'échelle. C'est la même technique qu'on utiliserait en PHP pur.

Variantes utiles

Arrondi au centime inférieur (floor)


{math equation='floor(a/1.2*100)/100' a=$prices.$ipa assign='total_without_taxes'}

Résultat : 4.53 au lieu de 4.54.

Arrondi classique au centime (round)


{math equation='round(a/1.2*100)/100' a=$prices.$ipa assign='total_without_taxes'}

Équivalent à round avec 2 décimales, mais intégré directement dans le calcul.

Forcer l'affichage de 2 décimales avec `string_format`

Un piège courant : si le résultat est 4.50, Smarty affichera 4.5. Pour garantir deux décimales :


{$total_without_taxes|string_format:'%.2f'} € HT

Cela affichera toujours 4.50 € HT au lieu de 4.5 € HT.

Bonne pratique PrestaShop 8.x : éviter les calculs de taxe dans les templates

Si cette technique fonctionne parfaitement, il faut souligner qu'en PrestaShop 8.x, le calcul de prix devrait idéalement se faire côté PHP, pas dans le template Smarty.

PrestaShop fournit la classe Tools avec des méthodes dédiées :


// Dans un module ou un override de controller
$priceWithoutTax = Tools::ps_round($priceTTC / 1.2, 2, PS_ROUND_UP);

Les constantes d'arrondi disponibles dans PrestaShop :

ConstanteComportement `PS_ROUND_UP`Arrondi au centime supérieur `PS_ROUND_DOWN`Arrondi au centime inférieur `PS_ROUND_HALF_UP`Arrondi classique (0.5 → 1) `PS_ROUND_HALF_DOWN`Arrondi classique (0.5 → 0) `PS_ROUND_HALF_EVEN`Arrondi bancaire

Puis on passe la variable au template via $this->context->smarty->assign(). Cette approche est plus maintenable, testable, et respecte la séparation des responsabilités.

Attention aux règles fiscales

Le choix entre arrondi supérieur et inférieur n'est pas anodin sur le plan fiscal. En France, la règle d'arrondi des prix HT/TTC est encadrée. PrestaShop gère cela automatiquement via le paramètre Méthode d'arrondi dans Préférences > Général. Si vous calculez manuellement des prix HT dans vos templates, assurez-vous de respecter la méthode d'arrondi configurée dans votre boutique.

Pour récupérer dynamiquement la méthode d'arrondi configurée :


$roundMode = (int) Configuration::get('PS_PRICE_ROUND_MODE');

Cela garantit la cohérence entre vos calculs personnalisés et le reste de la boutique.

#smarty #arrondi #prix-ht #template #math

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.