nanoton, GRAM, 그리고 소수 9자리
TON의 모든 금액은 정수입니다. liteserver, API, get 메서드는 결코 "1.5 GRAM"을 반환하지 않습니다. nanoton의 개수인 1500000000을 반환하고, 어떻게 표시할지는 클라이언트가 결정합니다. 1 GRAM(이전에 Toncoin이라 불리던 TON 네이티브 코인의 새 이름이며, 네트워크 자체는 여전히 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변환기는 정확히 그 일만 합니다. 소수점을 옮기는 것입니다. 환율도 없고 온체인 조회도 없습니다.
도구가 부동소수점을 거부하는 이유
JavaScript의 number는 64비트 부동소수점입니다. 정수는 2⁵³, 약 9.007 × 10¹⁵(nanoton으로 약 900만 GRAM)까지만 정확히 표현하며, 대부분의 소수는 아예 표현하지 못합니다. 0.1 + 0.2는 0.30000000000000004입니다. 따라서 잔액을 1e9로 나눴다가 다시 곱하는 것은 손실이 있는 왕복이며, nanoton 하나만 어긋난 금액도 트랜잭션에서는 여전히 잘못된 금액입니다.
이 페이지의 모든 것은 십진 문자열에 대한 BigInt 연산입니다. 단위의 소수 자릿수로 표현할 수 없는 값(0.0000000001 GRAM, 즉 nanoton의 10분의 1)은 반올림이 아니라 오류입니다. 과학적 표기법도 같은 방식으로 처리됩니다. 1e9는 10억, 2.5e-3은 0.0025이며 둘 다 정확합니다.
Jetton과 decimals
jetton 수량 역시 jetton 자체의 기본 단위로 된 정수입니다. 기본 단위 몇 개가 표시 단위 하나를 이루는지는 jetton의 decimals가 정하며, 이는 메타데이터(마스터 컨트랙트의 get_jetton_data get 메서드가 반환하는 content 셀)의 decimals 키에 공개됩니다. 키가 없으면 표준(TEP-64)은 9라고 합니다.
TON의 USDT는 다른 체인의 USDT처럼 6을 사용합니다. 1 USDT는 1000000 raw 단위입니다. 소수 9자리라고 가정하고 1000000000을 보내면 1,000 USDT를 보내는 것이며, 이것이 네트워크에서 가장 흔한 단위 실수입니다. 프리셋은 USDT와 일반적인 9를 다루고, decimals 필드에는 살펴보는 jetton에 맞게 0부터 30까지 어떤 값이든 입력할 수 있습니다.
이 버전은 체인에서 decimals를 읽지 않습니다. 모른다면 여기의 숫자를 믿기 전에 liteserver나 익스플로러로 jetton의 메타데이터를 읽으세요.
변환기가 받아들이는 입력
소수점 하나 또는 소수 쉼표 하나(1,5)가 있는 숫자, 소수점이 있을 때의 공백·밑줄·쉼표 천 단위 구분자(1 000.25, 1,000,000.5), 앞의 +, 그리고 지수(1e9, 2.5E-3). 음수는 거부됩니다. 출력은 꾸밈 없는 정수 또는 소수이며, 읽기 쉽도록 자릿수를 구분한 버전도 함께 보여줍니다.
