MonCash : montants en gourdes, décimales et arrondis — comment éviter les erreurs ?
asked a month ago74 viewsfr
Mes prix sont calculés avec des remises en pourcentage et j'obtiens des montants comme 1 234,5675 HTG. Quel format envoyer à MonCash, et comment stocker les montants ?
AI diagnosis
AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.
1 Answer
Règle n°1 : jamais de float pour de l'argent. 0.1 + 0.2 !== 0.3 en JavaScript, et ces erreurs finissent par faire échouer la comparaison du montant payé avec le montant attendu.
Stockage : numeric(12,2) en PostgreSQL, ou des centimes entiers (integer/bigint) :
total_htg_cents bigint NOT NULL CHECK (total_htg_cents > 0)
Calcul : arrondissez une seule fois, au moment de figer le total de la commande, avec une règle explicite :
function applyDiscount(cents: number, percent: number): number {
return Math.round(cents * (100 - percent) / 100); // arrondi au centime le plus proche
}
Envoi à MonCash : envoyez exactement le total figé. En pratique, beaucoup de marchands affichent et facturent des montants en gourdes entières (pas de centimes), ce qui supprime toute ambiguïté pour le client. Choisissez une règle (par ex. arrondir au goud supérieur) et appliquez-la partout : panier, facture et paiement.
Vérification au retour : comparez des nombres, pas des chaînes :
const paidCents = Math.round(Number(payment.cost) * 100);
if (paidCents !== order.totalHtgCents) flagForReview(order.id);
Les frais éventuels du marchand se comptabilisent à part. Ne modifiez pas le montant de la commande pour les refléter.
Sign in to tell others whether this worked.
Sign in and verify your email to post an answer.