Плавающее число до двух десятичных PHP - PullRequest
0 голосов
/ 19 января 2020

Я знаю, что вопрос очень базовый c, но мне кажется, что это ничего не работает.

У меня есть число (либо с плавающей точкой, либо с целым числом), которое я хочу отформатировать с точностью до двух десятичных знаков. Для этой цели я использую PHP функцию number_format, но она преобразует мое число в строку.

Чтобы преобразовать его обратно в число с плавающей точкой, я использую (float) или floatval(). Но эти функции просто усекают число после преобразования его в число с плавающей точкой из строки.

Вот мой код

$revenue_sum = array_sum(array_column($val2, 'weighted_revenue'));  //23722


$test = number_format($revenue_sum, 2);            //"23,722.00"
$test = (float)number_format($revenue_sum, 2);     //23.0
$test = floatval(number_format($revenue_sum, 2));  //23.0

Я хочу, чтобы $ test был 23722,00 для $ дохода_сум = 23722

Если $ доход_сум = 2372,2, $ тест должен быть 2372,20

Ответы [ 3 ]

0 голосов
/ 19 января 2020

вы можете попробовать это

<?php echo sprintf("%2.2f", 8900.258); ?>

, которое будет выводиться как

8900.26

0 голосов
/ 19 января 2020

Если вы присвоите значение с плавающей запятой переменной, то оно преобразуется во внутренний двоичный формат (обычно с использованием IEEE 754). Не все возможные значения имеют внутреннее представление. Таким образом, при сканировании текста число с плавающей точкой округляется до ближайшего возможного значения. Так, например, 1.23 округляется до 1.22999999999999998.

Из-за внутреннего представления нет никакой разницы между 100 или 1e2 или 100.0 или 100.0000.

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

В общем: пока вы рассчитываете, форматирование не имеет значения. В большинстве случаев лучше всего игнорировать десятичные фрагменты при отладке. Но при печати (= преобразование в текст) используйте такие функции, как format_number() или любую из функций printf().

Чтобы быть более прагматичными c:

0 голосов
/ 19 января 2020
Функцию

number_format () можно использовать следующим образом:

echo number_format($revenue_sum, 2,'.',''); // will return 23722.00 for the $revenue_sum = 23722

Вы пытаетесь набрать приведение со значением ',', строка усекается.

...