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). Від'ємні суми відхиляються. Результат — ціле або десяткове число без оформлення плюс варіант із роздільниками розрядів для читання.
