什么是代币精度 Decimals?钱包里的 1 枚币,合约为什么记成一串整数
代币合约通常只记录最小单位整数,Decimals 决定钱包如何显示小数点。本文讲清换算方法、常见误区,以及余额显示异常时的核对步骤。
区块浏览器显示某地址持有 1000000 个最小单位,钱包界面却显示 1 枚代币;另一个代币同样记录 1000000,界面可能显示 1000000 枚。数字没有算错,差别往往来自代币合约设置的 decimals,也就是显示精度。
这个概念看起来只是小数点位置,却关系到钱包显示、转账参数、交易所充值和智能合约交互。精度读错,轻则界面余额离谱,重则程序把转账数量放大或缩小很多倍。
代币合约通常只处理整数。Decimals 告诉钱包和应用:把账本里的整数向左移动多少位,才是给人看的数量。
为什么合约不直接保存小数
计算机处理货币时,常用最小单位的整数来避免浮点数误差。现实里的支付系统也会把 12.34 元记成 1234 分。代币采用类似思路:链上记录最小单位,界面负责转换成人类习惯的小数。
如果某代币的 decimals 是 6,那么链上整数 1,000,000 显示为 1 枚代币;如果 decimals 是 18,显示 1 枚就需要链上整数 1,000,000,000,000,000,000。

| 链上整数 | Decimals | 界面显示 |
|---|---|---|
| 1,000,000 | 6 | 1 |
| 1,000,000 | 3 | 1,000 |
| 1,000,000 | 0 | 1,000,000 |
| 1,000,000,000,000,000,000 | 18 | 1 |
通用换算可以写成:人类可读数量 = 链上整数 ÷ 10 的 decimals 次方。反过来,程序发送代币时,通常要把用户输入的数量乘以同样的倍数,再作为整数交给合约。
Decimals 不会改变代币总量或价值
把 decimals 从概念上理解成尺子的刻度,而不是把一块蛋糕切成更多蛋糕。它主要影响显示方式,不会因为小数位更多就让代币更稀缺或更值钱。
ERC-20 标准把 decimals 定义为可选的界面信息。官方规范举例:如果返回 8,就用链上数量除以 100,000,000 得到用户看到的表示。标准同时提醒,应用不能假设所有代币一定提供这项信息。
为什么很多代币是 18 位,但并非全部
18 位很常见,因为以太坊原生资产 ETH 的最小单位 wei 与 ETH 之间也是 10 的 18 次方关系,许多开发库和代币实现沿用了这个习惯。但 ERC-20 并没有要求所有代币必须是 18 位,现实中也存在 6 位、8 位、0 位或其他精度。
因此,看到代币符号相同也不能直接套用精度。名称、符号和 decimals 都是合约返回的界面信息,真正识别资产时仍要核对网络和合约地址。

精度错误会出现哪些现象
- 余额异常大或异常小:钱包没有正确读取精度,或手工添加代币时填错。
- 程序转账数量不对:代码把人类数量直接当成最小单位,或重复做了一次换算。
- 交易页面显示很多零:前端格式化规则错误,不一定代表链上余额出错。
- 同名代币表现不同:它们可能是不同合约,精度和资产本身都不同。
普通用户遇到显示异常怎么查
- 先确认网络:同一个地址在不同链上的资产彼此独立。
- 核对合约地址:从项目可信官方渠道获取,不靠名称搜索结果猜测。
- 查看 decimals:在区块浏览器的合约信息或读取合约功能中确认。
- 对照原始整数:按 10 的精度次方手工换算一次。
- 换一个可信界面交叉验证:如果链上原始数据正常,可能只是钱包缓存或显示问题。
切勿为了“修复显示”向陌生网站连接钱包、签名或输入助记词。Decimals 是公开的合约数据,查询它不需要泄露私钥。
开发或做表格时最容易犯的错
不要用普通浮点数直接处理大额代币数量,因为浮点表示可能丢失精度。更稳妥的做法是始终保存最小单位整数,只有展示给用户时才格式化小数;接收用户输入时,先验证小数位数,再转换为整数。
| 环节 | 建议保存形式 | 注意事项 |
|---|---|---|
| 数据库 | 字符串或大整数最小单位 | 避免普通浮点类型 |
| 计算 | 大整数或高精度十进制 | 明确舍入规则 |
| 界面展示 | 按 decimals 格式化 | 不要随意截断有效位 |
| 构造交易 | 最小单位整数 | 发送前再次核对 |
小结:Decimals 是显示说明,不是价值倍增器
- 代币合约通常用整数记录最小单位。
- Decimals 决定界面把小数点放在哪里。
- 常见的 18 位只是习惯,不是所有代币的硬性规则。
- 精度不改变总量和价值,但填错会让显示或转账数量严重失真。
- 核对代币时,网络和合约地址比名称、符号更可靠。
下次看到一长串零,先别被数字吓到。找到 decimals,把它换算成人能读懂的单位,账本和钱包界面就对上了。
本文为链上指南原创科普,不构成任何投资建议。参考:ERC-20 Token Standard(EIP-20)、ethereum.org ERC-20 文档。