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

Получил проблему математического вычисления.

$a = 34.56

$b = 34.55

$a сделайте некоторое вычисление для получения этого числа

$b делает округление к ближайшим 0.05 для получения этого числа

то, что происходит,

$c = $b - $a

предположительно, это быть-0.01, но я отзываюсь эхом $c, который показывает-0.00988888888888

Я пытаюсь использовать number_format($c, 2), но вывод 0.00,

как я могу удостовериться $a и $b точно 2 десятичных числа, никакое скрытое число сзади.

в моем php знании, number_format только может отформатировать дисплей, но значение не является действительно 2 десятичными числами,

Я надеюсь, что могу получить справку отсюда. Это действительно расстроило меня.

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

3 ответа

Попробуйте 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
поделиться
Другие вопросы по тегам:

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