Nanoton, GRAM и девять знаков
Любая сумма в TON — целое число. Liteserver, API или get-метод никогда не возвращают «1.5 GRAM»; они возвращают 1500000000 — количество nanoton, а как это показать, решает клиент. Один GRAM — переименованная нативная монета TON, ранее Toncoin; сама сеть по-прежнему называется TON — равен 10⁹ nanoton, так что отображаемая сумма — это целое число со сдвигом десятичной точки на девять разрядов влево:
1 GRAM = 1 000 000 000 nanoton
0.000000001 GRAM = 1 nanoton
1e9 GRAM = 1 000 000 000 000 000 000 nanotonКонвертер делает ровно это и ничего больше: сдвигает десятичную точку. Здесь нет ни курса, ни запросов к сети.
Почему инструмент отказывается от float
number в JavaScript — это 64-битный float. Целые числа он представляет точно только до 2⁵³, около 9,007 × 10¹⁵ — это примерно 9 миллионов GRAM в nanoton, — а большинство десятичных дробей не может представить вовсе: 0.1 + 0.2 даёт 0.30000000000000004. Поэтому разделить баланс на 1e9 и умножить обратно — операция с потерями, а сумма, отличающаяся на один nanoton, в транзакции всё равно неверная.
Всё на этой странице — арифметика BigInt на десятичных строках. Значение, которое нельзя представить в decimals единицы — 0.0000000001 GRAM, десятая часть nanoton, — это ошибка, а не округление. Экспоненциальная запись обрабатывается так же: 1e9 — миллиард, 2.5e-3 — 0.0025, оба значения точны.
Жетоны и decimals
Сумма жетона — тоже целое число в собственной базовой единице жетона. Сколько базовых единиц составляют одну отображаемую, определяют decimals жетона, опубликованные в его метаданных — ячейке content, которую возвращает get-метод get_jetton_data мастер-контракта, — под ключом decimals. Если ключа нет, стандарт (TEP-64) предписывает 9.
USDT в TON использует 6, как и USDT в других сетях: 1 USDT — это 1000000 raw-единиц. Отправить 1000000000, предположив девять знаков, значит отправить 1 000 USDT — это самая частая ошибка с единицами в сети. Пресеты покрывают USDT и обычные девять; в поле decimals можно ввести любое значение от 0 до 30 для жетона, который вы рассматриваете.
Эта версия не читает decimals из сети. Если вы их не знаете, прочитайте метаданные жетона через liteserver или обозреватель, прежде чем доверять числу здесь.
Какой ввод принимает конвертер
Цифры с одной десятичной точкой или одной десятичной запятой (1,5), разделители разрядов — пробелы, подчёркивания или запятые при наличии точки (1 000.25, 1,000,000.5), ведущий + и экспоненту (1e9, 2.5E-3). Отрицательные суммы отклоняются. Результат — целое или десятичное число без оформления плюс вариант с разделителями разрядов для чтения.
