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.

13voto

Wasim A. Punkte 9161
bcdiv($number, 1, 2) // 2 variiert für Ziffern nach dem Dezimalpunkt

Dies zeigt genau zwei Ziffern nach dem Dezimalpunkt an.

Vorteil:

Wenn Sie nur zwei Ziffern nach einem Fließkommawert anzeigen möchten und nicht für Ganzzahlen, verwenden Sie dies.

1 Stimmen

Dies ist die universellste Lösung, wenn Sie bcdiv haben (es ist ein Lager, aber kein Standardpaket auf centos6).

11voto

mrphpguru Punkte 123
$Einzelhandelspreis = 5.989;
echo number_format(floor($Einzelhandelspreis*100)/100,2, '.', ''); 

Es wird 5.98 zurückgeben, ohne die Zahl zu runden.

0 Stimmen

Nur das kann auch die Arbeit erledigen floor($retailPrice * 100) / 100; dann ist keine Nummernformatierung erforderlich.

10voto

Shamim Hafiz - MSFT Punkte 20458

Verwenden Sie die PHP number_format() Funktion.

8voto

joanlgr Punkte 99

Ich mache mein Eigenes.

$dezimalstellen = 2;
$nummer = 221.12345;
$nummer = $nummer * pow(10, $dezimalstellen);
$nummer = intval($nummer);
$nummer = $nummer / pow(10, $dezimalstellen);

1 Stimmen

Es ist schön zu sehen, dass einige der benötigten Mathematik zu tun. Obwohl für mich die Verwendung einer integrierten Funktion bevorzugt wird. Es macht keinen Sinn, das Rad neu zu erfinden.

2 Stimmen

Es tut uns leid, aber round(), wie der Name schon sagt, rundet die Zahl, und manchmal möchte ich nicht runden.

0 Stimmen

@joanlgr: 221,12345 du schreibst im Beispiel, aber es ist eine dieser Zahlen, die für den Computer nicht existieren und daher eine Form des Rundens - auch wenn du es manchmal nicht willst - bereits codiert wurde, indem du einfach diese Anweisung schreibst $number = 221.12345 und PHP es analysieren und ausführen lässt. Das Hinzufügen weiterer Codezeilen danach ändert (wiederholt) es nicht. Z.B. "Nach Definition kann der Gleitkommafehler nicht eliminiert werden und kann im besten Fall nur verwaltet werden." von de.wikipedia.org/wiki/Gleitkommafehlervermeidung und der Warnung @php.net/float.

8voto

Vinay Punkte 7166

Für bedingte Rundung, d.h. Dezimalstelle nur anzeigen, wenn wirklich nötig, ansonsten Ganzzahl

123.56 => 12.56

123.00 => 123

$somenumber = 123.56;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123.56

$somenumber = 123.00;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123

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