MonCash : montants en gourdes, décimales et arrondis — comment éviter les erreurs ?

posée a month ago76 vuesfr

0

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 ?

Diagnostic IA

Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.

1 réponse

3
✓
✓ Réponse acceptée

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.

Connectez-vous pour dire si ça a marché.

answered a month ago

Sign in and verify your email to post an answer.