Номер 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
?>

Ответ 1

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

Ответ 2

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

Ответ 3

Как говорит Эмиль, твоя правда. Но если вы хотите удалить 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
?>

Ответ 5

Вы также можете использовать 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)

Ответ 6

На самом деле, я думаю, что самый чистый способ, который я могу придумать, сделать это для кого-то, кто просто искал поиск такого рода, заключается в том, чтобы сделать это:

( number_format ($sql_result["col_number"], 2) * 100 ) / 100;

Ответ 7

Если вы ориентируетесь на американскую валюту, мне нравится использовать этот метод:

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

Ответ 8

Ответ Warren.S помог мне. Мне не нужна функция number_format, поэтому я просто сделал это

$value=$value-0;

Но в случае OP ему нужен номер_формат для удаления запятых. Так что это сработает для него

$value=number_format ($sql_result["col_number"], 2, ".", "")-0;

Ответ 9

Поскольку я не мог найти гибкое решение, я написал простую функцию, чтобы получить лучший результат:

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);
}

Ответ 10

Меня обвиняют в том, что я делаю что-то вроде этого:

 floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);

Ответ 11

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

str_replace(".00", "", number_format($this->pieces, 2));

Ответ 12

Что насчет

number_format($value,2) - 0;