Я пытаюсь преобразовать 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 и знает, почему я получаю эту ошибку?
заранее спасибо
Ваши входные данные должны быть указаны в виде строки с помощью 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», следовательно, ошибка деления на ноль.
Я использую эту функцию:
function cryptoNumberFormat($value, $decimal){
$dividend = (string)$value;
$divisor = (string)'1'. str_repeat('0', $decimal);
return bcdiv($value, $divisor, $decimal);
}
Вы можете отформатировать любой криптографический токен с любой десятичной точностью и значением.
Нет необходимости указывать значения в виде строк.