Décimal, jamais flottant
Tous les montants sont des strings décimales côté API, jamais des floats. Pour éviter les erreurs d’arrondi IEEE-754 sur les montants financiers :number | string mais vous devriez toujours passer une string pour les opérations financières : utilisez decimal.js ou bignumber.js côté votre code.
Précision par devise fiat
L’API valide selon la devise :
amountRequested: "100.50" en XOF → 422 (XOF n’a pas de centimes).
Précision par crypto
Le widget arrondit toujours au plafond (
ceilToDecimals) sur les décimales d’affichage pour que le montant affiché au client matche exactement ce que la blockchain attendra. Évite les faux positifs “underpaid” quand le client copie-colle le montant affiché.
Conversion fiat → crypto
À la création d’un PaymentIntentrequestedCurrencyType: 'fiat', le montant fiat est saisi tel quel. La conversion en crypto est figée à la sélection de l’asset par le client et renvoyée sur l’intent (amountCryptoExpected).
Frais
Les frais sont calculés côté serveur et renvoyés sur l’intent, en décimal (string). Le SDK ne fait aucune math côté client :amountCryptoExpected et feeAmount proviennent de l’API.
Affichage côté UI
Pour formater un montant à afficher au client :Intl.NumberFormat :
Pour la conversion vers
Number à l’affichage uniquement, OK. Pour toute math arithmétique → restez en Decimal jusqu’au bout.