Номер PHP: десятичная точка отображается только при необходимости.

Я хотел бы знать, существует ли какая-либо функция для автоматического форматирования числа с десятичной точностью, поэтому, если у меня есть:

<?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 ?> 

Solutions Collecting From Web of "Номер PHP: десятичная точка отображается только при необходимости."

Я действительно думаю, что ваше обходное решение так же хорошо, как и любое другое. Это просто и понятно, и здесь нет смысла говорить о производительности здесь, поэтому просто пойдите на это.

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;