PHP number_format wird gerundet?

9

Ich habe einen Preis "0,10" oder "00000,10"

Wenn ich es jetzt versuche

%Vor%

Ich bekomme 0,00. Wie kann ich das beheben? Ich will 0,10 $. Ich möchte nicht abgerundet werden.

Oder wenn ich 5.678 habe, bekomme ich 5,68. Aber ich will 5,67.

    
PhpNhh7 22.05.2011, 11:31
quelle

9 Antworten

7

Sie können die Größe der Zahl vor dem Abrunden mit Floor erhöhen:

%Vor%

Eine andere Lösung, die eine bessere Genauigkeit bieten kann, da Fließkommaarithmetik vermieden wird, besteht darin, sie mit drei Dezimalstellen zu formatieren und die letzte Ziffer nach der Formatierung wegzuwerfen:

%Vor%     
Emil Vikström 22.05.2011 11:37
quelle
4

Sie sollten die mit Komma gefüllte Zahl mit str_replace wieder in das normale Dezimalformat konvertieren. $ number = str_replace (",", ".", $ number); und dann kannst du number_format

verwenden     
Fivell 22.05.2011 11:37
quelle
4

"00000,10" ist eine Zeichenkette. Du solltest einen Dezimalpunkt haben. Um das gewünschte Verhalten zu erhalten, könnten Sie verwenden:

%Vor%     
AndersTornkvist 22.05.2011 12:27
quelle
4

Einige Leute haben erwähnt, es auf 3 zu runden und dann das letzte Zeichen fallen zu lassen. Das funktioniert eigentlich nicht. Nehmen wir an, Sie haben 2.9999 und runden es auf 3. Es sind 3.000.

Das ist immer noch nicht genau, die beste Lösung ist dies:

%Vor%

Was dies tut, nimmt den Preis und multipliziert ihn mit 100 (10 ^ dezimal), was 567,8 ergibt, dann benutzen wir floor, um es auf 567 zu bringen, und dann teilen wir es zurück durch 100, um 5.67

zu erhalten     
Andrew Rosolino 16.01.2012 02:17
quelle
2

Kurz bevor number_format ausgeführt wird, wird die Zeichenkette "0,10" durch php in eine Zahl umgewandelt. Da php immer die englische Schreibweise verwendet, wird es nicht nach dem Komma schauen.

%Vor%

Der "Äpfel" -Teil wird ignoriert genauso wie Ihr ", 10" ignoriert wird.

Konvertieren des "," in ein "." erlaubt php, die anderen Ziffern zu sehen.

%Vor%     
Bob Fanger 22.05.2011 13:09
quelle
2

Mein Problem war, dass html validator error message thar number_format() argument nicht doppelt ist.

Ich habe diese Fehlermeldung gelöst, indem ich floatval für dieses Argument wie number_format(floatval($var),2,'.',' ') platziert habe und das funktioniert gut.

    
asim 16.07.2012 10:50
quelle
1

Wenn Sie nur führende Nullen löschen und nur die Länge begrenzen möchten, anstatt auf eine bestimmte Anzahl von Dezimalstellen zu runden, könnte eine allgemeinere Lösung diese Funktion sein:

%Vor%

Beispiel:

%Vor%

$ antwort entspricht jetzt "5,67"

    
SmokeyPHP 22.05.2011 11:48
quelle
1

Benutze dies (benötigt PHP-Erweiterung aktiviert)

%Vor%     
ThaDafinser 30.10.2014 10:07
quelle
0
%Vor%     
catalinp 19.12.2013 12:59
quelle

Tags und Links