php пускают в ход вычисление 2 десятичных точки

Да, Mockito является большой платформой. Я использую его вместе с hamcrest и облик Google для установки моих тестов.

22
задан Sandra 28 August 2019 в 11:15
поделиться

4 ответа

Попробуйте sprintf ("%. 2f", $ c);

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

Как предлагает кодировщик переменной длины, если вы знаете требуемую точность, и она не меняется (например, когда вы имеете дело с деньгами) может быть лучше просто использовать числа с фиксированной запятой, т.е. выражать числа в центах, а не в долларах

$a = 3456;

$b = 3455;

$c = $b - $a;

sprintf ("%.2f", $c/100.0);

Таким образом, у вас не будет ошибок округления, если вы выполните много вычислений перед печатью.

50
ответ дан 29 November 2019 в 03:27
поделиться

Используйте round () :

$c = round($b - $a, 2);

Примечание: вы также можете выбрать соответствующий режим округления.

Изменить: Хорошо, я не Не понимаю, что делает sprintf () , чего не number_format () :

$c = number_format($b - $a, 2);

vs

$c = sprintf("%.2f", $b - $a);

?

15
ответ дан 29 November 2019 в 03:27
поделиться

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

Например, если вы выполняете вычисления в числах с плавающей запятой, представляющих доллары (или вашу любимую валюту), вы возможно, вам захочется проводить расчеты в целых центах.

3
ответ дан 29 November 2019 в 03:27
поделиться

Вы можете очень аккуратно обойти все эти проблемы, просто используя библиотеку bcmath.

Просто не забудьте прочитать документацию и будьте осторожны, передаете ли вы аргументы как строки или как числовые типы данных.

4
ответ дан 29 November 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: