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.

8voto

Glorious Kale Punkte 1185

Zusätzlich zu den anderen Antworten, da number_format() standardmäßig ein Tausendertrennzeichen hinzufügt.

Um dies zu entfernen, tun Sie dies:

$number = number_format($number, 2, ".", "");

0 Stimmen

Gibt es eine Möglichkeit, dass es keinen String zurückgibt, wenn number_format() verwendet wird?

0 Stimmen

@natsumiyu: Nein, number_format() ist für die Rückgabe eines Strings, auch im Namen: format. Verwenden Sie round(), wenn Sie eine Gleitkommazahl suchen. Siehe auch php.net/float ("Gleitkommazahlen" im PHP-Handbuch).

7voto

ajreal Punkte 45851

round_to_2dp ist eine benutzerdefinierte Funktion, und es kann nichts getan werden, es sei denn, Sie haben die Deklaration dieser Funktion gepostet.

Meine Vermutung ist jedoch dies zu tun: number_format($number, 2);

18 Stimmen

Aus Ihrem ersten Absatz denke ich, dass Sie die Frage missverstanden haben. round_to_2dp($number); war als Pseudocode gedacht; der OP hat darum gebeten, ihm mitzuteilen, durch was dieser Ausdruck ersetzt werden soll.

6voto

JohnS Punkte 61
$twoDecNum = sprintf('%0.2f', round($number, 2));

Das Runden rundet die Zahl korrekt ab und das sprintf zwingt sie auf 2 Dezimalstellen, falls sie nach dem Runden nur 1 Dezimalstelle haben sollte.

5voto

S'copion Sam Punkte 69
$nummer = sprintf('%0.2f', $zahlen); // 520.89898989 -> 520.89

Dies gibt Ihnen 2 Zahlen nach dem Dezimalpunkt.

4 Stimmen

Nein, das wird es nicht tun. Ich weiß nicht, wann dieser Beitrag geschrieben wurde, aber wenn Sie es mit Ihrem eigenen Beispiel versuchen, zumindest auf meinem Gerät :-) , wird es 520,90 ausgeben. Bedeutet, es wird gerundet. Seien Sie vorsichtig!

5voto

jewelhuq Punkte 1146

Wenn Sie in Ihrem gesamten Projekt zwei Dezimalstellen verwenden möchten, können Sie folgendes definieren:

bcscale(2);

Dann erzeugt die folgende Funktion das gewünschte Ergebnis:

$myvalue = 10.165445;
echo bcadd(0, $myvalue);
// result=10.11

Aber wenn Sie die bcscale-Funktion nicht verwenden, müssen Sie den Code wie folgt schreiben, um das gewünschte Ergebnis zu erhalten.

$myvalue = 10.165445;
echo bcadd(0, $myvalue, 2);
// result=10.11

Weitere Informationen

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