PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zahl nach 2 Nachkommastellen abschneiden,aber nicht runden!



Andislack
16-09-2004, 01:19
Hi,
bin auf der Suche nach einer Funktion, die eine Zahl z.B. 17,126456 nach der 2. Nachkommastelle abschneidet, aber ohne zu runden!
Also sollte ich 17,12 bekommen.
Ich hab schon sprintf, printf, number_format usw. ausprobiert, aber die runden alle.

Muss ich mir da selbst eine Funktion schreiben, die die Zahl einfach abschneidet - also nen String bearbeiten? oder gibts dafür doch irgendwo ne Funktion, die mir entgangen ist?

Danke für Eure Hilfe
Andi

Pingu
16-09-2004, 07:30
Hi,

auf die Schnelle habe ich dir Funktion nicht gefunden. Aber eine andere Lösung die auch geht ist folgende

$erg = floor($val * 100) / 100;
Da brauch man keine ganze Funktion für.

Mehr dazu im Manual: floor() (http://de2.php.net/floor)

Pingu

EDIT: Wenn Du natürlich unbedingt eine Funktion schreiben möchtest, kannst Du natürlich ganz schnell eine allgemeine Lösung haben:

function floor2($val, $precision) {
$precision = ($precision < 0) ? 0 : $precision;
return floor($val * pow(10, $precision)) / pow(10, $precision);
}

Ein anderer Ansatz wäre:

function floor3($val, $precision) {
$precision = ($precision < 0) ? 0 : $precision;
return round($val - (0.5 / pow(10, $precision)), $precision);
}

undefined
16-09-2004, 08:40
Siehe noch einmal in der PHPManual sprintf() es macht genau das was du möchtest ;)
Wenn nicht Zeige bitte noch mal deinen Code zu sprintf()

Andislack
22-09-2004, 23:06
Hi,
ich hab das Problem mittlerweile gelöst - war "nur" ein Fehler von mir, brauchte gar nicht die Zahl abschneiden... :o
Aber mal zu Euren Vorschlägen:
@pingu:
Das mit floor funktioniert aber nur solange, wie $val ein double ist...ich hatte die ganze Zeit einen String und damit rundet floor() auf die nächste Ganzzahl ab...hätt ich daran mal gedacht...
Die anderen beiden Funktionen tun ja im Prinzip das Gleiche - trotzdem gut zu wissen.

@undefined:
hab mit sprintf tausend Varianten ausprobiert, bin dann doch einstimmig mit mir zum Schluss gekommen, dass sprintf abschneidet aber vorher rundet.
Wenn ich falsch liege, dann korrigier mich bitte und präsentier mir die Lösung.

Ansonsten vielen Dank für Eure Hilfe.
Gruss Andi