PHP Round() funktioniert nicht richtig
Ich brauche Hilfe. Ich bin dabei:
round($myvar,2);
- Und dies ist die Nummer, die ich bekommen hab: 9.779999999999999€
Mit den anderen Variablen funktioniert es ganz gut, keine Ahnung, wie man dieses Problem beheben?
- Was machst du nach der Rundung? Wie zeigst du diesen Wert?
round($myvar,2)
erzeugt keine Ausgabe, Sie wahrscheinlich machen einigeecho
oderprint
ist, zeigen uns voller code- Ich bin einfach mit echo... <?php echo round($R_ganhoComercial,2); ?>
- stackoverflow.com/questions/12435556/...
- Wird in dieser Runde die Nummer, oder einfach nur schneiden Sie es ?
- Was ist der Wert von $R_ganhoComercial @PabloCamara ?
- Vielleicht könnte es nützlich sein, wenn Sie den Teil des Codes, erzeugt die variable aus, die Sie abrunden möchten. Ist es wirklich sicher, dass Sie ein float?
- Das wird nicht angezeigt
€
, also was genau ist die Anzeige? Was sagt ein var_dump() von$R_ganhoComercial
geben? - Sie Jungs versuchen es: 9.7752 Versuchen Rundung, die Nummer, die ich versuche zu bekommen 9.78 oder so, aber es gibt 9.779999999999999...
- vergessen Sie die Euro Teil, die Hinzugefügt wurde, in der HTML-Teil, versuchen Sie, die Runde(9.7752,2) , nicht richtig funktioniert o.O
- codepad.viper-7.com/1MTg6e funktioniert bei mir
- Was ist die
precision
Einstellung Ihrerphp.ini
Konfiguration? Es wurde geändert der Standardwert der14
? - Ich habe gerade versucht genau diesem code: <?php echo round(9.7752,2);?> und es funktioniert nicht so wie Euch
- Ich weiß nicht, aber ich denke, das wäre es, wenn das ist der Fall, wie würde ich das lösen?
- Wenn es
precision
entweder ändern Sie es in Ihrerphp.ini
Datei, oder verwenden Sie ini_set() - Definieren
$myvar
- Sie können versuchen, number_format(round(myvar, 2), 2); aber es ist nur für die Anzeige.
- Ihre Präzision aussieht, 16, Standardwert ist 12
ini_set("precision", 12);
- was ist, wenn ich keinen Zugriff zum ändern der ini-Einstellungen auf einem shared-server?
- Auch wenn Sie sind nicht mit den Standard-Präzisions-Einstellung, die für Präzision, und Sie wird nicht lassen Sie es ändern, dann wechseln Sie Ihren Anbieter
- vielen Dank für die Anregung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich dieses:
Und ich bekam: 9.779999999999999
Ich glaube, es ist etwas in php.ini wie @MarkBaker sagte..
Doch, das habe ich behoben, indem Sie Folgendes tun:
Und ich bekam genau das, was ich wollte.
Danke Jungs für die Hilfe!!!
ini_set("precision", 12);
sollte auch funktionieren, Bearbeiten von php.ini würde es leichter machenetwas (könnte in einigen 3rd-party-code ?) stellen Sie Ihre ini-Einstellung
precision
zu16
welches problem ich begegnen, ist, dass Runde(18.203,2) = 18.2 ,dann die Funktionen json_encode(...) = 18.199999999 .
also ich finde die Lösung die Funktionen json_encode(strval(round(18.203,2))) = 18.2
es funktioniert
Ich hatte das gleiche problem und mein workaround (um nicht zu änderung der ini-Datei und möglicherweise brechen etwas anderes):
$gerundet = bcdiv($Zahl,1,2);
Obwohl OP gelöst sein Thema, sah ich dies, während der Suche nach anderen (aber ähnlichen) Problem.
Wenn Sie hierher mit einem problem, wo der PHP -
round()
Funktion fehlerhafte (d.h.round(1.4447, 2)
Ausgabe1.44
statt1.45
) das ist, weil die Runde sieht nur 1 dezimal position entfernt von der benötigten Präzision, hier ist eine kleine rekursive Hilfsfunktion, die löst das Problem:Beispiel:
Erklärung:
0
) in diesem Fall, da nicht anders angegeben.roundFloat(1.4447, 2, 15)
mit gleichenErgebnis für die gegebenen float
1.4447
.$startAt
nur definiert den Ausgangspunkt für die "Rundung Prozess" oder die erforderliche Präzision.Hinweis: alle Programmiersprachen haben Probleme mit dem schreiben einige Schwimmer genau (hat zu tun mit binären, google für mehr info).
Hoffe, es hilft jemand.
round(1.4447, 2)
-soll - Rendite-1.44; das ist die nächste 2-dezimal-Ziffer schweben.