Должен ли я использовать BCMath для значений с 1,2 или 3 десятичными?

У меня около 10-15 чисел с точностью до 1, 2 или 3 десятичных знаков в моей БД, как со знаком, так и без знака.

Пример используемых типов данных:

decimal(10,3), decimal(10,2), decimal(10,1)

Я вычисляю их в PHP примерно так:

$result = ($value1from_col1 + ($value2from_col2 * 30)/500) * 0.453;

Я тогда использую некоторые round() функции как это:

$result_round = round($result, 2, PHP_ROUND_HALF_UP);

Результат $result_round будет не более 100 000 999

Я проверяю это: насколько точность для PHP-библиотеки bcmath? и в ответе говорится, что это не будет проблемой, если вы не используете такие функции, как round(), printf и т. д.

Должен ли я использовать BCMath-расширение? (только потому, что я использую round())

1 ответ

Решение

Некоторые общие числа не могут быть представлены точно в двоичном виде (под общим, я имею в виду, что они часто встречаются в человеческих системах, очевидно, само по себе это бессмысленная концепция). Например, 0,1, 0,2. Чтобы понять некоторые проблемы, связанные с двоичным fp, взгляните на этот вопрос. Почему десятичные числа не могут быть представлены точно в двоичном формате?

Для многих распространенных приложений двоичный метод с плавающей точкой является неправильным выбором. Например, денежные расчеты будут "неправильными", потому что мы, как люди, рассчитываем считать в десятичном виде до заранее определенного числа десятичных знаков (2 в случае денег). Ошибки округления, вызванные использованием бинарного fp в финансовых расчетах, могут даже стать причиной кражи!

bcmath реализует десятичную FP и поэтому является более безопасным выбором.

Для измерения значений реального мира, например, в научном эксперименте, подходит двоичный FP.

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

Другие вопросы по тегам