# 理解ERC20中的decimals **Published by:** [B+](https://paragraph.com/@b-2/) **Published on:** 2023-04-11 **URL:** https://paragraph.com/@b-2/erc20-decimals ## Content decimals 本身是小数的意思,在区块链的ERC20的智能合约里边,也存在一个只读的decimals的方法。这个方法一般返回的是一个小于18的整数。为什么需要这个方法,他设计的初衷是什么,以及如何运用是这篇文章将要探讨的主题 他的作用是能将token分成任意小份。假设有一个Token叫PAI, 小明有3个PAI,想转账1.5个PAI给小红,自己留1.5个。这样的操作在solidity语言中是不被支持的。因为solidity只支持整数,所以你就只能转1或则2,不能转1.5个token 而ERC20里边定义decimals就是为了解决这一问题。如上边例子,如果PAI想要支持转账小数位后1位,那么他会将decimal就可以设置为1,那么余额的30就代表有3个PAI。这种情况下,小明可以转15给小红,也就实现了转1.5个PAI token现实例子:在Ethereum里,USDT的decimals是6,也就是说USDT支持最多小数点后六位的转账我们也找到了有6位数小数点的转账 https://etherscan.io/tx/0x543c3e23073b339d3aa17a252b275b57ba158542d1997928c3cd259023506688 在这笔转账中,转的token是213.778057个USDT而我们查看转账的log会发现,这笔钱是以213778057转入的如果这个ERC20的智能合约接受的value是这样的格式,那当我调用ERC20 smart contract的transfer方法的时候,我如何知道并把我想要转账的金额呢,下边的代码可以帮你解决这个问题:import ethers from 'ethers'; const transferAmount = 2.12; const decimals = await ERC20.decimals(); // 6 const value = ethers.utils.parseUnits(transferAmount, decimals); // 2120000 // when want to convert the transfer value to the token amount: ethers.utils.formatUnits(value, decimals) // 2.12 ## Publication Information - [B+](https://paragraph.com/@b-2/): Publication homepage - [All Posts](https://paragraph.com/@b-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@b-2): Subscribe to updates - [Twitter](https://twitter.com/carmen0208): Follow on Twitter