如何在PHP中将Ether转换为Wei

时间:2018-02-07 13:08:07

标签: math ethereum

我从Feed中提取数据并将其存储为字符串。在这个数据中,我的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转换为WEI作为整数或9912156618500000000
  2. 由于数字很大,我应该使用moontoast/math
  3. 转换后,我可以将新号码作为WEI存储在Money对象
  4. 去度假!
  5. 我被困在如何将ETH字符串值转换为WEI值...

2 个答案:

答案 0 :(得分:0)

当我处理货币时,像floatVal这样的东西不起作用,因为剩余的或除了期望值以外的任何东西都会随着时间的推移而增加。

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

  1. 获取ETH字符串值:string(12)" 9.9121566185"
  2. $ bn = new \ Moontoast \ Math \ BigNumber(' 9.9121566185',17); //添加17个小数位
  3. $ BN->乘法(1000000000000000000); //乘以1.0 E + 18
  4. $ bn2 = new \ Moontoast \ Math \ BigNumber($ bn-> getValue(),0); //砍下剩下的
  5. $ wei = $ bn2-> getValue();
  6. 以上输出完全符合:

    string(19) "9912156618500000000"
    

答案 1 :(得分:0)

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

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