bcmath операции с очень маленькими числами

Я хочу использовать bcmath для точных операций с очень маленькими числами, но это не удается. Я пытаюсь рассчитать цены на криптовалюту и подумал, что bcmath лучше, чем преобразование с плавающей запятой в целые числа.

Это работает:

php > эхо число_формат (0,000005 * 0,0025, 10);

0.0000000125

И это не работает:

php > echo number_format (bcmul (0,000005, 0,0025, 10), 10);

0.0000000000

php > эхо число_формат (bcadd (0,000005, 0,00000025, 10), 10);

0.0000000000

Есть ли какие-то настройки для bcmath или это нормальное поведение?


person Valentine Morozov    schedule 03.11.2017    source источник
comment
обертывание числа строкой, как указано в здесь, поможет   -  person    schedule 03.11.2017


Ответы (1)


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

echo bcmul('0.000005', '0.0025', 10), "\n";
echo number_format(bcmul('0.000005', '0.0025', 10), 10), "\n";

Выходы:

0.0000000125
0.0000000125
person Alex Howansky    schedule 03.11.2017