Почему функция bcmath не потеряет приоритет?

Мы все знаем, что работа с числами с плавающей запятой может привести к следующим проблемам:

echo intval(0.58*100);//57

А использование функций bcmath поможет:

echo bcmul('0.58', '100', 2);//58.00

Руководство по PHP:

//Multiply the left_operand by the right_operand.
string bcmul(string $left_operand , string $right_operand [, int $scale = 0 ])

Но почему это будет работать?
Я заметил, что первые два параметра должны быть строковыми. Интересно, это потому, что эти функции обрабатывают числа строковым способом?

0

Решение

Числа, используемые с bcmath должны быть представлены в виде строк, потому что если вы используете собственные форматы чисел php, такие как integer или float, то вы просто не можете выразить все значения.

Простейший пример — целочисленный тип. Целые числа ограничены максимальным значением, определяемым константой PHP_INT_MAX, Если вы попытаетесь записать любое число, большее, чем этот php, вы не сможете представить это точное число. Это связано с тем, что php использует заранее определенный объем памяти для хранения целых чисел.

Смотрите этот пример:

echo PHP_INT_MAX;
echo "\n";
echo PHP_INT_MAX + 1;

Выход:

9223372036854775807
9.2233720368548E+18

Как вы можете видеть второе значение не 9223372036854775808, что было бы правильно, но некоторые другие (аналогичные) значения.

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector