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.

2voto

Abhishek Sharma Punkte 300

Nummer ohne Rundung

$double = '21.188624';
echo intval($double) . '.' . substr(end(explode('.', $double)), 0, 2);

0voto

Bryan Punkte 3281

Hier ist eine weitere Lösung mit strtok und str_pad:

$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')

0voto

Kareem Punkte 4611
  • Wählen Sie die Anzahl der Dezimalstellen
  • Kommata formatieren(,)
  • Eine Option zum Abschneiden von Nachkommastellen

Ein für alle Mal!

function format_number($number,$dec=0,$trim=false){
  if($trim){
    $parts = explode(".",(round($number,$dec) * 1));
    $dec = isset($parts[1]) ? strlen($parts[1]) : 0;
  }
  $formatted = number_format($number,$dec); 
  return $formatted;
}

Beispiele

echo format_number(1234.5,2,true); //gibt 1,234.5 zurück
echo format_number(1234.5,2);      //gibt 1,234.50 zurück
echo format_number(1234.5);        //gibt 1,235 zurück

1 Stimmen

Hallo @Kareem, ich frage mich, wie ich das Dezimalformat zurückgeben kann, ohne dass es ein String ist. Ich habe deinen Code ausprobiert, aber die Rückgabe ist ein String. Danke dir

0 Stimmen

Hallo @natsumiyu, je nach Verwendungszweck kannst du einfach den Variablentyp deklarieren. Wenn du immer eine Nummer zurückgeben möchtest, kannst du die Funktion bearbeiten, um dort (int) auf der zurückgegebenen Zeichenkette zu deklarieren. $num = (int) format_number(1234.5,2);

0voto

Rehan Anis Punkte 728

Das ist dieselbe Frage, auf die ich heute gestoßen bin und ich möchte eine Zahl runden und den Fließkommawert auf eine bestimmte Dezimalstelle zurückgeben und es darf keine Zeichenfolge sein (wie sie von number_format zurückgegeben wird) die Antwort lautet

printf('%.' . $decimalPlaces . 'f', round($number, $decimalPlaces));

Danke an mickmackusa für das Aufzeigen des Fehlers

0 Stimmen

echo sprintf() ist ein Antimuster. Es sollte sinnvollerweise nur als printf() geschrieben werden.

0 Stimmen

Ich habe versucht, dies zu verwenden, aber ich bekomme immer noch einen String-Wert.

1 Stimmen

Sprintf() gibt niemals einen Fließkommawert zurück, daher ist es wirklich schwer zu verstehen, was Sie erreichen möchten. So oder so, sowohl round() als auch sprintf() sind in den vorhandenen Antworten enthalten, daher finde ich, dass diese nichts Neues hinzufügt.

-2voto

paulalexandru Punkte 8875

Wenn Sie eine mathematische Gleichung wie ich verwenden, können Sie sie wie folgt festlegen:

{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}

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