Ответ 1
Я действительно думаю, что ваше обходное решение так же хорошо, как и любое другое. Это просто и понятно, и на самом деле нет смысла говорить о производительности здесь, поэтому просто пойти на это.
Я хотел бы знать, существует ли какая-либо функция для автоматического форматирования числа с помощью десятичного числа, поэтому, если у меня есть:
<?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 или просто литье в float
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;
Если вы ориентируетесь на американскую валюту, мне нравится использовать этот метод:
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
Ответ Warren.S помог мне. Мне не нужна функция 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);
}
Меня обвиняют в том, что я делаю что-то вроде этого:
floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);
Мой, так как большинство количества или штук не требуют десятичной дроби, эта функция будет показывать только десятичную дробь, когда это необходимо.
str_replace(".00", "", number_format($this->pieces, 2));
Что насчет
number_format($value,2) - 0;