Я хотел бы знать, существует ли какая-либо функция для автоматического форматирования числа с десятичной точностью, поэтому, если у меня есть:
<?php // $sql_result["col_number"] == 1,455.75 number_format ($sql_result["col_number"], 2, ".", ""); // will return 1455.75 // $sql_result["col_number"] == 1,455.00 number_format ($sql_result["col_number"], 2, ".", ""); // could I get 1455 instead of 1455.00? ?>
так что мой ответ: если существует какой-то способ удаления десятичных знаков, если у меня есть форма данных DECIMAL в моей БД только тогда, когда она раунд?
Или shoud я делаю что-то подобное?
<?php // $sql_result["col_number"] == 1,455.00 str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", "")); // will return 1455 ?>
Я действительно думаю, что ваше обходное решение так же хорошо, как и любое другое. Это просто и понятно, и здесь нет смысла говорить о производительности здесь, поэтому просто пойдите на это.
floatval или просто литье для поплавка
php > echo floatval(7.00); 7 php > echo floatval(2.30); 2.3 php > echo floatval(1.25); 1.25 php > echo floatval(1.125); 1.125 php > echo (float) 7.00; 7 php > echo (float) 2.30; 2.3 php > echo (float) 1.25; 1.25 php > echo (float) 1.125; 1.125
Как говорит Эмиль, твоя доброта. Но если вы хотите удалить 0
например, 7.50
, у меня есть предложение rtrim()
:
<?php // if $sql_result["col_number"] == 1,455.50 rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.'); // will return 1455.5 ?>
Я добавляю статью. Удалите ненужные нулевые цифры из десятичных знаков в PHP, как более удобный способ очистить значение без лишнего десятичного значения, если это необходимо.
Вы также можете использовать rtrim (), который удалит избыток 0s, в случае, если вы захотите сохранить одно десятичное место, но не избыточные нули. (Например, 4.50 становится 4.5.) Также позволяет изменять число десятичных знаков от 2 до любого другого числа.
rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),"."); // 4.00 -> 4 // 4.50 -> 4.5 // 4.54000000 -> 4.54 (if you're doing more decimal places)
На самом деле я думаю, что самый чистый способ, который я могу придумать, сделать это для кого-то, кто просто сделал поиск, ищет такое, чтобы это сделать:
( number_format ($sql_result["col_number"], 2) * 100 ) / 100;
Ответ Уоррена помог мне. Мне не нужна функция number_format, поэтому я просто сделал это
$value=$value-0;
Но в случае OP ему нужен номер_формат для удаления запятых. Так что это сработает для него
$value=number_format ($sql_result["col_number"], 2, ".", "")-0;
Поскольку я не мог найти гибкое решение, я написал простую функцию, чтобы получить лучший результат:
function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '') { $bestNumberOfDecimals = -1; $decimal = 0; while ($decimal <= $max_decimals) { $bestNumberOfDecimals = $decimal; $valueDecimals = number_format($value, $decimal); if (floatval($value) == $valueDecimals) { break; } $decimal++; } if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0)) { $bestNumberOfDecimals = 0; } return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep); }
Если вы ориентируетесь на американскую валюту, мне нравится использовать этот метод:
function moneyform($number, $symbol = true) { return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number)); } moneyform(1300999); -->$1,300,999 moneyform(2500.99); -->$2,500.99 moneyform(2500.99, false); -->2,500.99
Как насчет
number_format($value,2) - 0;