【问题标题】:How to convert Ether to Wei in PHP如何在 PHP 中将 Ether 转换为 Wei
【发布时间】:2018-02-07 13:08:06
【问题描述】:

我正在从提要中提取数据并将其存储为字符串。在此数据中,我的 ETH 价格如下所示:

string(12) "9.9121566185"

我想将此数字转换为 WEI 并将其存储为 Money/Php 对象

当我尝试以下操作时:

$money = new Money('9.9121566185', new Currency('ETH'));
echo $money->getAmount();

我得到错误:

Amount must be an integer(ish) value

所以我想我需要做以下事情:

  1. 将字符串从 ETH 转换为整数或 9912156618500000000 的 WEI
  2. 由于数量很大,我应该使用moontoast/math
  3. 转换后,我可以将新号码作为 WEI 存储在 Money 对象中
  4. 去度假吧!

我被困在如何将 ETH 字符串值转换为 WEI 值...

【问题讨论】:

  • PHP String to Float的可能重复
  • 不是重复的,floatVal的解决方案不理想。
  • 您也可以使用brick/math 来转换大数(无论有无 BCMath 和 GMP 都可以使用)。如果你没有被moneyphp/money 锁定,你也可以使用brick/money,它基于brick/math,原生处理大量数字和自定义货币。

标签: math ethereum


【解决方案1】:

当我处理货币时,floatVal 之类的东西不会起作用,因为随着时间的推移,余数或预期值以外的任何东西都会累加。

这就是我解决问题的方法:

  1. 获取ETH字符串值:string(12) "9.9121566185"
  2. $bn = new \Moontoast\Math\BigNumber('9.9121566185',17); //添加17位小数
  3. 十亿美元->乘(1000000000000000000); //乘以 1.0 E+18
  4. $bn2 = new \Moontoast\Math\BigNumber($bn->getValue(),0); //把剩下的切掉
  5. $wei = $bn2->getValue();

上面的输出完全正确:

string(19) "9912156618500000000"

【讨论】:

    【解决方案2】:

    您应该使用解析器将数字转换为货币对象

    $currencies = [
     'ETH' => 18
    ];
    $currencyList = \Money\Currencies\CurrencyList($currencies);
    $parser = new \Money\Parser\DecimalMoneyParser($currencyList);
    $ethMoney =$parser->parse('9.9121566185', new \Money\Currency('ETH'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 2018-08-31
      • 2022-08-20
      • 2018-04-26
      • 1970-01-01
      • 2013-11-01
      • 2013-07-06
      • 2021-11-25
      相关资源
      最近更新 更多