显示逻辑和输入

当创建一个应用程序时,在用户友好的字符串(通常显示为ether)和机器可读的值(合约和数学公式所依赖的,通常使用wei)之间进行转换是很有用的

例如,一个钱包通过ether显示余额,在用户界面中用gwei显示gas价格,但是当发送一个交易时,两者都必须用wei表示。

parseUnits是将ether表示的字符串解析成wei表示的字符串, 例如将1.1解析为wei表示的BigNumber,并且在用户输入值时非常有用,例如发送1.1 ether。

formatUnits是将BigNumberish解析成ether表示的字符串,这在显示余额时非常有用。

单位(Units)

十进制数(Decimal Count)

Unit可以指定为一个数字,它表示小数点位数。

例子:

命名单位

还有几种常见的命名单位,ethers中 可以使用它们的name(string类型)进行操作。

NameDecimals 
wei0 
kwei3 
mwei6 
gwei9 
szabo12 
finney15 
ether18 

功能函数

格式化

ethers.utils.commify( value ) string

返回一个由3位数字组成的,并且用,分隔的字符串.

commify("-1000.3000"); // '-1,000.3'

转换

ethers.utils.formatUnits( value [ , unit = "ether" ] ) string

返回格式化后字符串形式表示的值, 如果是数字number指定,则格式化为对应的小数位数; 如果是字符串string指定,则格式化为 string name 对应的单位;。

const oneGwei = BigNumber.from("1000000000"); const oneEther = BigNumber.from("1000000000000000000"); formatUnits(oneGwei, 0); // '1000000000' formatUnits(oneGwei, "gwei"); // '1.0' formatUnits(oneGwei, 9); // '1.0' formatUnits(oneEther); // '1.0' formatUnits(oneEther, 18); // '1.0'
ethers.utils.formatEther( value ) string

等价于调用formatUnits(value, "ether")

const value = BigNumber.from("1000000000000000000"); formatEther(value); // '1.0'
ethers.utils.parseUnits( value [ , unit = "ether" ] ) BigNumber

返回BigNumber表示的值, 如果是数字number指定,则解析为对应的小数位数; 如果是字符串string指定,则解析为 string name 对应的单位。

parseUnits("1.0"); // { BigNumber: "1000000000000000000" } parseUnits("1.0", "ether"); // { BigNumber: "1000000000000000000" } parseUnits("1.0", 18); // { BigNumber: "1000000000000000000" } parseUnits("121.0", "gwei"); // { BigNumber: "121000000000" } parseUnits("121.0", 9); // { BigNumber: "121000000000" }
ethers.utils.parseEther( value ) BigNumber

等价于调用parseUnits(value, "ether")

parseEther("1.0"); // { BigNumber: "1000000000000000000" } parseEther("-0.5"); // { BigNumber: "-500000000000000000" }