SEEDBAO

首页 › 全部文章 › 代币的小数位

代币的小数位是怎么回事:为什么余额和你想的差好几位

深度指南 最后更新:2026 年 9 月 4 日 林拾 · SEEDBAO

30 秒结论

「我明明还剩一点,钱包却显示 0」「同一笔钱,这边显示 8 位小数,那边只有 2 位」——这两件事的根子是同一个:链上从来没存过小数。代币合约里记的是一个整数,小数点是钱包和交易所在显示的时候,按这个代币声明的位数临时点上去的。

剩下的怪现象,基本都是这一条的推论。

先说清楚这篇不做什么:它不教你怎么下单,不讨论哪个币值得买,也不替任何一个代币报一个固定位数——同名代币在不同链上可能是不同的合约,真要用的时候只能以合约当时返回的为准。这篇只讲机制,外加一个你随时能自己动手查的办法。

照例说明:查一个代币的小数位只用得到公开的区块浏览器,不需要账户、不需要连接钱包、不需要任何授权。文内链到的本站教程默认币安在你所在地区可用;受限地区请勿注册使用,也不要用 VPN 绕开限制。

链上存的是整数,不是小数

这是全篇的地基,值得先立住。以太坊上要查一个代币的余额,调的是合约的 balanceOf,而这个方法在 ERC-20 标准里的返回类型是 uint256 —— 无符号整数。合约里没有「0.5 个」这种东西,只有一个很大的整数。

那小数点从哪来?来自另一个方法 decimals。标准对它的说明很直白:返回这个代币使用的小数位数,比如返回 8,意思就是把代币数量除以 100000000 才是给人看的那个数。所以链上记着 250000000、decimals 是 8,钱包界面上显示的就是 2.5。

这个设计不是为了绕人,是为了躲开浮点误差。钱这种东西一旦用小数去算,累加多了就会冒出「0.1 加 0.2 不等于 0.3」那一类偏差;改成整数记账,加减都是精确的,只在最后展示给人看的时候换算一次。传统记账用「分」而不是「元」,是同一个道理。

一句话记住:链上是整数,小数点是显示层加的。你在不同界面看到的位数不同,变的只是「点在哪儿」和「后面截掉几位」,链上那个整数从头到尾没动过。

为什么每个币的位数还不一样

位数是发币方在合约里自己定的,不是链规定的,所以完全可以不同。两个有官方出处的例子:

币最小单位一个币等于多少个最小单位
ETHwei1 ether = 1018 wei(18 位)
BTC聪 satoshi1 BTC = 100,000,000 聪(8 位)

这两行是官方文档直接写明的,可以放心引用。除此之外的币,本站一律不报位数 —— 稳定币、各类合约代币的位数由发行方自己定,而且同一个名字的代币在不同链上往往是不同的合约,位数也可能不同。所以「某某币是几位」这种问法本身就不严谨,正确的问法永远是「这条链上的这个合约是几位」。

标准里还有个细节值得知道:decimals 在 ERC-20 里是可选的。标准原文写明这个方法可以用来改善可用性,但接口和其它合约不得假定它一定存在。绝大多数正经代币都会实现它,但在规范层面它确实不是必需项 —— 这也是下面「自己查」那一节里,偶尔会查不到这一栏的原因。

余额显示 0,不一定真的是 0

这是最常被问到的一种。界面上写着 0,或者 0.00,但你记得账户里应该还剩一点 —— 多半不是钱没了,是显示位数不够。

假设某个代币是 18 位,你手上还剩一点零头,换算成人看的数是 0.000000000000000123。如果这个界面只显示到小数点后 8 位,它就只能显示 0.00000000,四舍五入之后就是一片零。钱在,只是这块屏幕装不下那么多位。

怎么确认是「显示不下」还是「真的没了」:拿地址去区块浏览器查一次,浏览器通常会给出完整位数,或者至少给出链上那个原始整数。这一步怎么走,本站一笔链上转账,自己怎么核对那篇讲了完整流程。那篇管的是金额少了(手续费、看错行、平台先扣),本篇管的是位数对不上 —— 这两件事经常被搅在一起。

顺带说个现实:这类零头往往取不出来。不是被谁扣了,而是它可能连一笔网络费都不够付。这种情况下最省事的处理是当它不存在,而不是为了几分钱去付一笔更贵的手续费。

最少能转多少:链上的下限和平台的下限是两回事

「最少能转多少」这个问题有两个完全不同的答案,混起来就会互相打架。

  • 链上的下限是 1 个最小单位,也就是那个整数取 1。这个下限低到没有实际意义,任何代币都能转出这么一点点。
  • 平台的下限是交易所或钱包自己定的规则,通常明显高得多。它跟精度没关系,跟成本和风控有关:一笔提币要付网络费、要占清算资源,低于某个数对平台就是纯亏。

所以当你看到「最低提币数量」把你挡住时,那是平台规则在起作用,不是链不让你转。这个数各家不同,也会随网络费调整,以你操作时提币页当时显示的为准,本站不在这里给具体数字。

还有第三种下限也常被算进这笔账:兑换的最小额度。第一次做 Swap 会遇到,本站第一笔 Swap那篇讲了滑点、网络费和最小金额是怎么一起决定这笔换划不划算的。

自己查一个代币是几位:三步

1拿到合约地址,注意拿对链

同名代币在不同链上是不同合约,先确认你说的是哪条链上的那一个。地址应当从官方渠道或你自己账户里的资产详情取 —— 不要从聊天记录里复制,这一条和本站在钱包安全习惯里反复讲的是同一件事。

2在对应链的区块浏览器上打开这个合约

代币合约页通常直接标出 Decimals 这一栏,读一眼就有。找不到的话,在合约的只读方法里调用 decimals 也能拿到。要是两条路都拿不到,回想上面那个细节 —— 这个方法本来就是可选的。

3用它换算一次

把链上那个整数除以 10 的 decimals 次方,得到的就是给人看的数;反过来,你想转的数量乘以同样的倍数,就是链上实际要写进去的整数。

什么时候真的需要走这一遭:自己写脚本或者对账、两个界面的数字对不上、或者怀疑某个代币的显示有问题。日常转账用不着 —— 钱包已经替你换算好了。

顺便,看到一个陌生代币时,decimals 本身也是个可看的线索:位数异常、或者合约干脆没实现这个方法,都值得多留一分神。识别陌生代币还有别的角度,本站钱包地址发给别人有风险吗?能查到人吗那篇讲的是地址这一侧能暴露多少信息。

核对来源

  • EIP-20 代币标准原文 — balanceOf 返回 uint256;decimals 标注为 OPTIONAL,原文说明接口与其它合约不得假定它一定存在,其含义为「返回该代币使用的小数位数,例如 8 表示把代币数量除以 100000000 才是用户看到的数」。核对本文「链上存的是整数」与「为什么每个币的位数还不一样」两节。
  • ethereum.org《Intro to Ether》 — wei 是 ether 的最小单位,1 ether = 1018 wei。核对本文对照表中的 ETH 一行。
  • Bitcoin.org 词汇表 — 「聪是链上记录的比特币最小单位,1 比特币等于 100,000,000 聪」。核对本文对照表中的 BTC 一行。

以上为官方 / 权威参考,页面内容与界面字段名可能随时调整,以你打开时的实际显示为准 · 核验于 2026 年 9 月。这两行以外,本文不列任何代币的小数位数值:同名代币在不同链上可能是不同合约,以合约当时返回的为准;最低提币量以你操作时平台页面当时显示的为准。

文 / 林拾(SEEDBAO 笔名) · 操作路径按币安官方页面逐步核对,写不准的数字标「以官方页面为准」。本站含币安推广链接;并非币安官方网站。