3

我正在尝试使用 php 和 bc-math 扩展将 wei 转换为 eth。

尝试使用此功能对其进行转换时:

function wei2eth($wei)
{
    return bcdiv($wei,1000000000000000000,18);
}

我收到以下错误:

警告:bcdiv():第 121 行 C:\xampp\htdocs\test\coindata.php 中除以零

有没有人使用 bc-math 扩展和 bcdiv 将 wei 转换为 eth 并且知道为什么我会收到这个错误?

提前致谢

4

2 回答 2

7

您的输入需要用 bc-math 指定为字符串,特别是输入大于 PHP_INT_MAX。bcdiv的签名如下:

string bcdiv ( string $left_operand , string $right_operand [, int $scale = 0 ] )

在我的 64 位机器上,您的函数一直有效$wei >= PHP_INT_MAX(在我的情况下为 9223372036854775807),因为在那之前 PHP 正确地转换了输入。

echo wei2eth('9357929650000000000');
// output 9.357929650000000000

echo wei2eth(9357929650000000000);  // 
// output 0.000000000000000000 and no warning with my env.

您还需要修改 bcdiv 的第二个参数:

function wei2eth($wei)
{
    return bcdiv($wei,'1000000000000000000',18);
}

因为我怀疑您的系统是 32 位的,并且您的第二个参数被强制转换为“0”,因此除以零错误。

于 2017-08-06T13:59:33.643 回答
0

我使用这个功能:

function cryptoNumberFormat($value, $decimal){
    $dividend = (string)$value;
    $divisor = (string)'1'. str_repeat('0', $decimal);
    return bcdiv($value, $divisor, $decimal);
}

您可以使用任何小数精度和值格式化任何加密令牌。无需将值作为字符串提供。

于 2019-01-20T21:56:30.453 回答