PHP номер: десятичная точка видна только при необходимости - PullRequest
55 голосов
/ 06 ноября 2010

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

<?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 в моей БД, только когда она круглая?

Или я должен сделать что-то подобное?

<?php
    // $sql_result["col_number"] == 1,455.00
    str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", ""));
    // will return 1455
?>

Ответы [ 11 ]

27 голосов
/ 30 октября 2014

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
14 голосов
/ 06 ноября 2010

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

8 голосов
/ 07 мая 2011

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

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

5 голосов
/ 23 октября 2016

Вы также можете использовать rtrim (), который удалит лишние 0, если вы хотите сохранить один десятичный знак, но не лишние нули. (Например, 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)
1 голос
/ 17 октября 2017

Если вы ориентируетесь на валюту США, я хотел бы использовать этот метод:

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
1 голос
/ 10 сентября 2012

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

( number_format ($sql_result["col_number"], 2) * 100 ) / 100;
0 голосов
/ 25 февраля 2019

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

 floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);
0 голосов
/ 05 декабря 2016

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

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);
}
0 голосов
/ 19 марта 2014

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

$value=$value-0;

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

$value=number_format ($sql_result["col_number"], 2, ".", "")-0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...