wake-up-neo.com

PHP Zahl: Dezimalpunkt nur sichtbar, wenn nötig

Ich möchte wissen, ob es eine Funktion gibt, mit der eine Zahl automatisch nach Dezimalzahl formatiert wird. Wenn ich also Folgendes habe:

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

meine Antwort ist also, ob es eine Möglichkeit gibt, die Dezimalzahlen zu entfernen, wenn ich in meiner Datenbank nur DECIMAL-Datenforma habe, wenn es rund ist?

Oder soll ich so etwas tun?

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

Ich denke wirklich, dass Ihr Workaround so gut ist wie jeder andere. Es ist einfach und klar und es hat wirklich keinen Sinn, hier von Leistung zu sprechen, also machen Sie es einfach.

12
Emil H

floatval oder einfach gießen, um zu schweben

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
23
xDiff

Wie Emil sagt, deine sind gut. Wenn Sie jedoch 0 von z. 7.50 auch, ich habe einen Vorschlag, rtrim():

<?php
    // if $sql_result["col_number"] == 1,455.50
    rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.');
    // will return 1455.5
?>
8
Halil Özgür

Ich füge den Artikel Remove useless zero digit aus Dezimalzahlen in PHP hinzu, um den Wert auf eine schönere Art und Weise zu reinigen, falls dies nicht erforderlich ist.

7
vitto

Sie können auch rtrim () verwenden, um überschüssige 0s zu entfernen, falls Sie eine Dezimalstelle beibehalten möchten, die überschüssigen Nullen jedoch nicht. (Beispiel: 4.50 wird zu 4.5.) Außerdem können Sie die Anzahl der Dezimalstellen von 2 auf eine beliebige andere Zahl ändern.

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)
4
Dan Leveille

Ich denke, der sauberste Weg, den ich mir vorstellen kann, um dies für jemanden zu tun, der gerade nach so etwas gesucht hat, ist folgendes zu tun:

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

Wenn Sie auf US-Währung abzielen, benutze ich diese Methode:

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
Kevin J

Mir wurde vorgeworfen, so etwas zu tun:

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

Warren.S Antwort hat mir geholfen. Ich habe die number_format-Funktion nicht benötigt, also habe ich das einfach gemacht

$value=$value-0;

Im Fall des OP benötigt er number_format, um die Kommas zu entfernen. Das würde also für ihn funktionieren

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

Da ich keine flexible Lösung finden konnte, schrieb ich eine einfache Funktion, um das beste Ergebnis zu erzielen:

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
ThomasK