Nanoton, GRAM et neuf décimales
Tout montant sur TON est un entier. Un liteserver, une API ou un get-method ne renvoie jamais « 1.5 GRAM » ; il renvoie 1500000000, le nombre de nanoton, et le client décide comment l'afficher. Un GRAM — le nouveau nom de la monnaie native de TON, autrefois appelée Toncoin ; le réseau s'appelle toujours TON — vaut 10⁹ nanoton, de sorte que le montant affiché est l'entier avec la virgule décalée de neuf positions vers la gauche :
1 GRAM = 1 000 000 000 nanoton
0.000000001 GRAM = 1 nanoton
1e9 GRAM = 1 000 000 000 000 000 000 nanotonLe convertisseur fait exactement cela et rien d'autre : il déplace une virgule. Il n'y a ici ni taux de change ni consultation de la chaîne.
Pourquoi l'outil refuse les flottants
Un number JavaScript est un flottant sur 64 bits. Il ne représente exactement les entiers que jusqu'à 2⁵³, environ 9,007 × 10¹⁵ — à peu près 9 millions de GRAM en nanoton — et il ne peut pas représenter la plupart des fractions décimales : 0.1 + 0.2 donne 0.30000000000000004. Diviser un solde par 1e9 puis le remultiplier est donc un aller-retour avec perte, et un montant décalé d'un nanoton reste un montant faux dans une transaction.
Tout sur cette page est de l'arithmétique BigInt sur des chaînes décimales. Une valeur qui ne peut pas être représentée dans les décimales de l'unité — 0.0000000001 GRAM, un dixième de nanoton — est une erreur, jamais un arrondi. La notation scientifique est traitée de la même façon : 1e9 vaut un milliard, 2.5e-3 vaut 0.0025, les deux exactement.
Jettons et décimales
Un montant de jetton est aussi un entier, dans l'unité de base propre au jetton. Le nombre d'unités de base qui composent une unité d'affichage est donné par les décimales du jetton, publiées dans ses métadonnées — la cellule content renvoyée par le get-method get_jetton_data du contrat maître — sous la clé decimals. Quand la clé est absente, le standard (TEP-64) dit 9.
USDT sur TON utilise 6, comme USDT sur les autres chaînes : 1 USDT vaut 1000000 unités brutes. Envoyer 1000000000 parce qu'on a supposé neuf décimales envoie 1 000 USDT, ce qui est l'erreur d'unités la plus courante du réseau. Les préréglages couvrent USDT et les neuf décimales génériques ; le champ des décimales accepte toute valeur de 0 à 30 pour le jetton que vous examinez.
Cette version ne lit pas les décimales sur la chaîne. Si vous ne les connaissez pas, lisez les métadonnées du jetton via un liteserver ou un explorateur avant de vous fier à un chiffre d'ici.
Entrées acceptées par le convertisseur
Des chiffres avec un point décimal ou une virgule décimale (1,5), des séparateurs de milliers sous forme d'espaces, de tirets bas ou de virgules quand un point est présent (1 000.25, 1,000,000.5), un + initial et un exposant (1e9, 2.5E-3). Les montants négatifs sont refusés. La sortie est l'entier ou le décimal brut, plus une version groupée pour la lecture.
