Конвертировать Wei в Ethereum с переполнением стека

Я пытаюсь преобразовать wei в eth, используя php и расширение bc-math.

при попытке конвертировать его с помощью этой функции:

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

Я получаю следующую ошибку:

Предупреждение: bcdiv (): деление на ноль в C: \ xampp \ htdocs \ test \ coindata.php в строке 121

Кто-нибудь использовал расширение bc-math и bcdiv для преобразования wei в eth и знает, почему я получаю эту ошибку?

заранее спасибо

2

Решение

Ваши входные данные должны быть указаны в виде строки с помощью 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», следовательно, ошибка деления на ноль.

4

Другие решения

Я использую эту функцию:

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

Вы можете отформатировать любой криптографический токен с любой десятичной точностью и значением.
Нет необходимости указывать значения в виде строк.

0