Когда я делаю это приведение типов:
(float) '0.00';
Я получаю 0
. Как я могу получить 0.00
и все еще иметь тип данных как float?
Когда я делаю это приведение типов:
(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()
, чтобы изменить способ отображения номера. Он вернет a string
, тип исходной переменной не изменяется.
вы можете попробовать это, он будет работать для вас
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($amount, 2, '.', '');
Английская нотация без разделителя тысяч.
Вы можете использовать floatval()
Вы можете использовать круглую функцию
round("10.221",2);
Вернет 10.22
попробуй это
$result = number_format($FloatNumber, 2);
Вы можете использовать эту простую функцию. number_format()
$num = 2214.56;
// default english notation
$english_format = number_format($num);
// 2,215
// French notation
$format_francais = number_format($num, 2, ',', ' ');
// 2 214,56
$num1 = 2234.5688;
// English notation with thousands separator
$english_format_number = number_format($num1,2);
// 2,234.57
// english notation without thousands separator
$english_format_number2 = number_format($num1, 2, '.', '');
// 2234.57