Когда я делаю это приведение типов:
(float) '0.00';
Я получаю 0
. Как я могу получить 0.00
и все еще иметь тип данных как float?
У вас нет 0
или 0.00
: это разные представления внутреннего ( IEEE754 ) двоичного формата.
Если вы хотите выразить свой float как «0.00», вам необходимо отформатировать его в строке, используя number_format :
$numberAsString = number_format($numberAsFloat, 2);
Насколько я знаю, для решения этой проблемы нет решения для PHP. Все остальные (выше и ниже) ответы, приведенные в этом потоке, носят бред.
Функция number_format возвращает строку как результат, написанную в собственной спецификации PHP.net.
Такие функции, как floatval / doubleval, возвращают целые числа, если вы даете значение 3.00.
Если вы набираете текст, вы получите целое число в качестве результата.
Если вы используете round (), вы получите целое число в качестве результата.
Единственное возможное решение, о котором я могу думать, – использовать вашу базу данных для преобразования типов в float. MySQL, например:
SELECT CAST('3.00' AS DECIMAL) AS realFloatValue;
Выполните это, используя слой абстракции, который возвращает float вместо строк, и там вы идете.
Если вы ищете решение для исправления вывода JSON для хранения 2 десятичных знаков, вы, вероятно, можете использовать пост-форматирование, как в приведенном ниже коде:
// PHP AJAX Controller // some code here // transform to json and then convert string to float with 2 decimals $output = array('x' => 'y', 'price' => '0.00'); $json = json_encode($output); $json = str_replace('"price":"'.$output['price'].'"', '"price":'.$output['price'].'', $json); // output to browser / client print $json; exit();
Возвращает клиент / браузер:
{"x":"y","price":0.00}
0.00 на самом деле 0. Если вам нужно иметь 0,00, когда вы эхо, просто используйте number_format следующим образом:
number_format($number, 2);
вы можете попробовать это, это сработает для вас
number_format(0.00, 2)
Вы можете показывать числа с плавающей запятой
т.е.
$myNonFormatedFloat = 5678.9 $myGermanNumber = number_format($myNonFormatedFloat, 2, ',', '.'); // -> 5.678,90 $myAngloSaxonianNumber = number_format($myNonFormatedFloat, 2, '.', ','); // -> 5,678.90
Обратите внимание, что
1-й аргумент – это номер с плавающей точкой, который вы хотите отформатировать
Второй аргумент – это число десятичных знаков
Третий аргумент – это символ, используемый для визуального разделения десятичных знаков
4-й аргумент – это символ, используемый для визуального разделения тысяч
Используйте функцию number_format()
чтобы изменить способ отображения числа. Он вернет string
, тип исходной переменной не будет изменен.
Вы можете использовать floatval()
floatval ()
Вы можете использовать эту простую функцию
number_format($amount, 2, '.', '');
Английская нотация без разделителя тысяч.
см. PHP: number_format – Руководство
Вы можете использовать круглую функцию
round("10.221",2);
Вернет 10.22