Почему вычитание не работает должным образом с использованием bcmath?

скажем, у меня есть

$foo = bcsub(bcdiv(1, 3, 20), 0.00001, 20);

он возвращает мне 0.333333333333333333333

Если у меня есть

$foo = bcsub(bcdiv(1, 3, 20), 0.0001, 20);

он возвращает мне 0.333233333333333333332

Если у меня есть

$foo = bcsub(0.333333333333333333, 0.00001, 20);

он возвращает мне 0.333333333333333331483

Если у меня есть

$foo = bcsub(0.333333333333333333, 0.0001, 20);

он возвращает мне 0,333233333333333331482

Так почему он не может правильно вычитать, это что-то с плавающей запятой? Но он отлично работает, когда просто bcdiv(1, 3, 20)


person Templar    schedule 04.07.2011    source источник


Ответы (1)


Используйте строки вместо чисел с плавающей запятой в качестве параметров функций BC:

$foo = bcsub(bcdiv("1", "3", "20"), "0.00001", "20");

Если вы используете число с плавающей запятой (т. е. 0,00001), PHP преобразует это число в число с плавающей запятой, что не является точным. Если вы используете строку (например, «0,00001»), BC выполнит преобразование в число произвольной точности, которое является точным.

person Sjoerd    schedule 04.07.2011