Почему вычитание не работает должным образом с помощью bcmath? - PullRequest
2 голосов
/ 04 июля 2011

Допустим, у меня есть

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

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

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

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

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

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

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

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

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

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

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

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

1 Ответ

9 голосов
/ 04 июля 2011

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

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

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

...