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.

1493voto

Codemwnci Punkte 52604

Sie können number_format() verwenden:

return number_format((float)$number, 2, '.', '');

Beispiel:

$foo = "105";
echo number_format((float)$foo, 2, '.', '');  // Ausgabe -> 105.00

Diese Funktion gibt einen String zurück.

8 Stimmen

Round() wäre auch besser für die Lesbarkeit und Einfachheit, aber für alles Kritische sollten Sie beachten, dass es bekannt ist, fehlerhaft zu sein.

68 Stimmen

@ÁlvaroG.Vicario round löst das Problem des OP hier nicht. round("520", 2) gibt die Fließkommazahl 520 zurück, und das Echo davon wird natürlich nicht auf 2 Dezimalstellen angezeigt. Für den Zweck des OP - eine Ganzzahl auf 2 Dezimalstellen anzuzeigen, indem sie mit nachfolgenden Nullen aufgefüllt wird - benötigen Sie eine Zahlformatierungsfunktion, keine Rundungsfunktion.

4 Stimmen

Alle anderen Antworten sind auf Dezimalwerte mit einer Punktnotation beschränkt. Wenn Sie 520,00 anstelle von 520.00 benötigen, funktioniert dies einfach.

379voto

Somnath Muluk Punkte 51007

Verwenden Sie round() (verwenden Sie es, wenn Sie nur eine Zahl im Fließkommazahlenformat erwarten, andernfalls verwenden Sie number_format() wie in einer Antwort von Codemwnci angegeben):

echo round(520.34345, 2);   // 520.34
echo round(520.3, 2);       // 520.3
echo round(520, 2);         // 520

Aus der Anleitung:

Beschreibung:

float round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]);

Gibt den gerundeten Wert von val auf die angegebene precision (Anzahl der Dezimalstellen) zurück. precision kann auch negativ oder null (Standardwert) sein.

...

Beispiel #1 Beispiele für round()

### Beispiel #2 Modusbeispiele

echo round(8.5, 0, PHP_ROUND_HALF_UP); // 9 echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_ODD); // 9 ?>

17 Stimmen

@khuderm round($number, 2); funktioniert nicht. Ich möchte 520,00 statt 520. Kann nicht glauben, dass round das nicht standardmäßig macht.

13 Stimmen

Es antwortet nicht einmal korrek auf den OP, hat aber über 100 positive Bewertungen!

0 Stimmen

Ich möchte das Zahlenformat verwenden, aber wenn 100.00 zurückgegeben wird, soll es als 100 angezeigt werden. Wie geht das?

240voto

Marc B Punkte 347897

Alternativ

$gepuffert = sprintf('%0.2f', $ungepuffert); // 520 -> 520.00

4 Stimmen

So was ist, wenn du 520,00 möchtest? Ich denke, die andere Antwort funktioniert in diesem Fall besser.

3 Stimmen

^Nein, die andere Antwort wird für eine Ganzzahl nicht zwei Dezimalstellen anzeigen.

3 Stimmen

Andere Gründe, warum Sie dies möglicherweise möchten, sind, dass Sie keine Rundung möchten... oder in meinem Fall SQL-Fließkommazahlen nicht gleich behandelt werden wie normale Fließkommazahlen, was ein PHP-Mathematikfehler ist

57voto

SystemX17 Punkte 3439

http://php.net/manual/de/function.round.php

beispielsweise

echo round(5.045, 2);    // 5.05

echo round(5.055, 2);    // 5.06

0 Stimmen

Round wird die genaue Funktionalität erfüllen, die Rich möchte, aber number_format() wäre interessanter zu untersuchen für alle Arten von numerischer Formatierung.

0 Stimmen

Diese Methode führt auch eine Rundung durch, anstatt einfach die Stellen ".00" am Ende zu erzwingen.

21 Stimmen

Ich habe versucht, aufzurunden, aber es funktioniert nicht - es fügt nicht die zusätzlichen .00 hinzu.

33voto

Biju Punkte 329

Versuchen Sie es:

$number = 1234545454; 
echo  $english_format_number = number_format($number, 2); 

Das Ergebnis wird sein:

1,234,545,454.00

4 Stimmen

Das funktioniert, aber die Ausgabe wäre ein String und keine Zahl.

2 Stimmen

Wenn Sie number_format verwenden möchten, verwenden Sie mindestens number_format($number, 2, '.', '')

1 Stimmen

@Ethan - Richtig, diese Frage und Antwort handelt davon, eine Zahl als Zeichenfolge mit einer festgelegten Anzahl von Dezimalstellen zu formatieren.

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