789 Stimmen

Zeige eine Zahl auf zwei Dezimalstellen

Wie kann man eine PHP-Zeichenfolge auf zwei Dezimalstellen genau runden?

$number = "520"; // Es ist eine Zeichenfolge aus einer Datenbank

$formatted_number = round_to_2dp($number);

echo $formatted_number;

Die Ausgabe sollte 520.00 sein;

Wie sollte die Definition der Funktion round_to_2dp() sein?

21 Stimmen

Das ist wirklich kein "Runden". Runden reduziert die Genauigkeit. Es fügt keine Dezimalstellen zu einer Zahl hinzu, die diese nicht hat. Basierend auf vielen der Antworten und Kommentare scheint es, dass die Leute denken, dass Runden etwas ist, was es nicht ist. runden ist eine mathematische Funktion, und das ist nur ein Formatierungsproblem.

27voto

Sani Kamal Punkte 1051

Verwenden Sie die PHP number_format() Funktion.

Zum Beispiel,

$num = 7234545423;
echo number_format($num, 2);

Das Ergebnis wird sein:

7,234,545,423.00

21voto

pankaj Punkte 555

Verwenden Sie round(yourValue,decimalPoint) (Seite im PHP-Handbuch) oder number_format(yourValue,decimalPoint);

number_format() gibt den Wert als Zeichenkette wie diesen Typ 1,234.67 zurück. In diesem Fall können Sie es also nicht für Addition oder irgendeine Berechnung verwenden. Wenn Sie es trotzdem versuchen, müssen Sie sich mit dem Nummernformatfehler auseinandersetzen...

In diesem Fall wäre round(121222.299000000,2) eine bessere Option. Das Ergebnis wäre dann 121222.29 ...

0 Stimmen

Hallo @pankaj, ich frage mich, weil die Verwendung von number_format() einen string zurückgibt, wie kann ich es auf 0,00 ändern, ohne ein string zu sein? Danke dir

0 Stimmen

@natsumiyu: number_format() ist für die Rückgabe eines Strings gedacht, wenn Sie eine Gleitkommazahl benötigen, verwenden Sie php.net/round , round(), das für die Rückgabe eines Fließkommawerts gedacht ist. Wie in der Antwort, für die Sie Feedback in Ihrem Kommentar angefordert haben, im ersten und letzten Satz erwähnt, beachten Sie jedoch Kommentare wie diesen: stackoverflow.com/questions/4483540/…

20voto

Aditya P Bhatt Punkte 20261

Sie können die PHP-Funktionen printf oder sprintf verwenden:

Beispiel mit sprintf:

$num = 2.12;
echo sprintf("%.3f", $num);

Sie können das Gleiche auch ohne echo ausführen. Beispiel: sprintf("%.3f", $num);

Ausgabe:

2.120

Alternativ mit printf:

echo printf("%.2f", $num);

Ausgabe:

2.124

16voto

Mr. HK Punkte 2111

Hier erhalte ich zwei Dezimalstellen nach dem . (Punkt) mit einer Funktion...

function truncate_number($zahl, $genauigkeit = 2) {

    // Null verursacht Probleme und muss nicht gekürzt werden
    if (0 == (int)$zahl) {
        return $zahl;
    }

    // Sind wir negativ?
    $negativ = $zahl / abs($zahl);

    // Wandle die Zahl in eine positive um, um Rundungsfehler zu beheben
    $zahl = abs($zahl);

    // Genauigkeit für Division / Multiplikation berechnen
    $genauigkeit = pow(10, $genauigkeit);

    // Die Berechnungen durchführen und den negativen Wert auf das Ergebnis anwenden, um sicherzustellen,
    // dass das Ergebnis wieder korrekt negativ / positiv ist
    return floor( $zahl * $genauigkeit ) / $genauigkeit * $negativ;
}

Ergebnisse aus der obigen Funktion:

echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789);    // 2.56
echo truncate_number(2.56789, 3); // 2.567

echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789);    // -2.56
echo truncate_number(-2.56789, 3); // -2.567

Neue korrekte Antwort

Verwenden Sie die PHP-eigene BC Math-Funktion bcdiv

echo bcdiv(2.56789, 1, 1);  // 2.5
echo bcdiv(2.56789, 1, 2);  // 2.56
echo bcdiv(2.56789, 1, 3);  // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567

0 Stimmen

Vielen Dank für das Update. Funktioniert großartig für Längen- und Breitengrad.

15voto

powtac Punkte 39079

Ein weiterer exotischerer Weg, dieses Problem zu lösen, ist die Verwendung von bcadd() mit einem Platzhalterwert für den $right_operand von 0.

$formatted_number = bcadd($number, 0, 2);

3 Stimmen

Beachten Sie, dass Funktionen bc* nicht aufrunden, sie runden immer ab. Zum Beispiel ergibt bcadd("1.0999","0.0",1) "1.0", nicht "1.1".

3 Stimmen

Die BC-Math-Funktionen stoppen tatsächlich nur die Verarbeitung bei $ scale Nachkommastellen. Dies entspricht dem Runden in Richtung Null.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X