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

poze a month ago73 gadefr

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 ?

Dyagnostik IA

Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.

1 Repons

3
✓
✓ Repons yo aksepte

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.

Konekte pou di lòt moun si li te mache.

answered a month ago

Sign in and verify your email to post an answer.