PHP float с 2 десятичными знаками: .00

Когда я делаю это приведение типов:

(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

Если вы ищете решение для исправления вывода 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