2010-05-15 8 views

Antwort

18
floor() 

runden eine Zahl auf die nächste Ganzzahl ab.

EDIT: Wie von Mark unten ausgeführt, funktioniert dies nur für positive Werte, was eine wichtige Annahme ist. Für negative Werte sollten Sie ceil() verwenden - aber das Vorzeichen des Eingabewerts zu überprüfen wäre umständlich und Sie würden wahrscheinlich stattdessen Marks oder TechnoP (int) cast Idee verwenden. Ich hoffe, das hilft.

+0

Ich bin mir nicht sicher, ob dies für PHP gilt, aber die (int) -Sendung könnte einen Überlauf ergeben ... Ah, http://StackOverflow.com/Questions/300840/Force-PHP-Integer-Overflow sagt us: PHP max int ist 2147483647. – osti

22
$y = 1.235251; 
$x = (int)$y; 
echo $x; //will echo "1" 

Edit: die explizite Umwandlung verwenden zu (int) ist der effizienteste Weg, um auf diese AFAIK. Wenn Sie auch nach (int) umwandeln, werden die Ziffern nach dem "." Abgeschnitten. wenn die Zahl negativ ist, anstatt auf die nächst niedrigere negative Zahl gerundet:

echo (int)(-3.75); //echoes "-3"; 
echo floor(-3.75); //echoes "-4"; 
+2

explicit cast ist schneller als floor() in der Tat, aber wenn solche Mikrooptimierungen von Interesse sind, sollten Sie PHP nicht verwenden. –

+0

Ich stimme nicht zu, wenn ich PHP benutze, habe ich bereits einen großen Leistungsabfall, nur indem ich eine interpretierte Sprache benutze. Es liegt immer noch in meiner Verantwortung als Entwickler, keine unnötige Verzögerung einzuführen. Es ist auch ein Problem des Speichers, da floor() ein Funktionsaufruf ist und dadurch zusätzlichen Speicher benötigt. Abhängig von der Situation kann der Leistungseinfluss sogar ziemlich signifikant sein. – selfawaresoup

2
$y = 1.234; 
list($y) = explode(".", "$y"); 
+2

Nun, wenn Sie einen Verschleierungswettbewerb gewinnen wollen, wäre dies der Weg zu gehen ... Lustig, aber besser nicht für echte verwenden ... – selfawaresoup

2

Wenn Sie Ihre Eingabe nur positive schwebt dann wie bereits Bodenarbeiten erwähnt werden können.

floor(1.2) 

Allerdings, wenn Ihre ganze Zahl auch negativ sein könnte dann nicht Sie Boden können, was Sie wollen: es abrundet immer noch für negative Zahlen. Stattdessen können Sie wie bei einem anderen erwähnten Eintrag in int schreiben. Dies gibt Ihnen das richtige Ergebnis für negative und positive Zahlen.

(int)-1.2 
+0

Auch mit einer Zeichenfolge, wird floor() arbeiten, weil PHPs dynamisch Eingabe, solange die Zeichenfolge außer Ziffern und einem "." keine merkwürdigen Zeichen enthält. Preg zu starten führt nur zu einer langsamen Performance und einer Verschwendung von Speicher. – selfawaresoup

+0

@Techpriester: OK entfernt. Aber ich denke immer noch, du solltest int verwenden, nicht floor, wenn die Eingabe negativ sein könnte. Niemand hat bisher negative Eingaben in Betracht gezogen, was ich für eine Schande halte, weil das Poster nicht gesagt hat, dass die Eingabe positiv sein muss. –

+0

@Mark: Wahr. Daran habe ich nicht gedacht.Ich postete (int) nur aus Performancegründen :) – selfawaresoup

2

Sie könnten einen bitweisen Operator verwenden.

Ohne:

echo 49/3; 
>> 16.333333333333 

Mit "| 0" bitweise:

echo 49/3 | 0; 
>> 16 
Verwandte Themen