2010-05-15 29 views

Trả lời

18
floor() 

sẽ làm tròn số xuống số nguyên gần nhất.

EDIT: Như được chỉ ra bởi Mark bên dưới, điều này sẽ chỉ làm việc cho các giá trị dương, đó là một giả định quan trọng. Đối với các giá trị âm, bạn muốn sử dụng ceil() - nhưng việc kiểm tra dấu của giá trị đầu vào sẽ cồng kềnh và bạn có thể muốn sử dụng ý tưởng của (int) cast của Mark hoặc TechnoP thay thế. Hy vọng rằng sẽ giúp.

+0

Tôi không chắc chắn nếu điều này áp dụng cho PHP, nhưng (int) -cast có thể mang lại một số tràn ... Ah, http://stackoverflow.com/questions/300840/force-php-integer-overflow cho biết chúng tôi: PHP tối đa int là 2147483647. – osti

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

Edit: Sử dụng các diễn viên rõ ràng để (int) là con đường hiệu quả nhất để đến AFAIK này. Việc truyền tới (int) sẽ cắt các chữ số sau dấu "." nếu số lượng là tiêu cực thay vì làm tròn đến số lượng thấp hơn tiêu cực tiếp theo:

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

diễn viên rõ ràng nhanh hơn sau đó sàn() thực sự, tuy nhiên, khi vi mô như vậy là mối quan tâm của bạn, sau đó bạn không nên sử dụng PHP ở nơi đầu tiên. –

+0

Tôi không đồng ý, nếu tôi đang sử dụng PHP, tôi đã có hiệu suất giảm lớn chỉ bằng cách sử dụng ngôn ngữ thông dịch. Nó vẫn thuộc trách nhiệm của tôi với tư cách là một nhà phát triển, không phải để giới thiệu độ trễ không cần thiết. Nó cũng là một vấn đề của bộ nhớ vì floor() là một cuộc gọi hàm và do đó sẽ yêu cầu bộ nhớ bổ sung. Tùy thuộc vào tình hình, tác động hiệu suất thậm chí có thể khá đáng kể. – selfawaresoup

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

Vâng, nếu bạn muốn giành chiến thắng một cuộc thi obfuscation, đây sẽ là con đường để đi ... Funny, nhưng tốt hơn không sử dụng này cho ... – selfawaresoup

2

Nếu đầu vào của bạn chỉ có thể nổi tích cực sau đó như đã đề cập ở công trình sàn.

floor(1.2) 

Tuy nhiên nếu số nguyên của bạn có thể âm thì sàn có thể không cung cấp cho bạn những gì bạn muốn: nó luôn luôn làm tròn ngay cả đối với số âm. Thay vào đó, bạn có thể truyền tới int dưới dạng bài đăng khác được đề cập. Điều này sẽ cho bạn kết quả chính xác cho cả số âm và số dương.

(int)-1.2 
+0

Ngay cả với một chuỗi, floor() sẽ làm việc vì PHP động gõ miễn là chuỗi không chứa ký tự lạ bên cạnh chữ số và dấu ".". Bắn lên tiền cho điều này sẽ chỉ dẫn đến hiệu suất chậm và lãng phí bộ nhớ. – selfawaresoup

+0

@Techpriester: Đã xóa OK. Nhưng tôi vẫn nghĩ rằng bạn nên sử dụng int, không sàn nếu đầu vào có thể là tiêu cực. Không ai khác đã xem xét đầu vào tiêu cực, mà tôi nghĩ là một sự xấu hổ vì poster không nói rằng đầu vào phải là tích cực. –

+0

@Mark: Đúng vậy. Không nghĩ về điều đó.Tôi đăng (int) chỉ vì lý do hiệu suất :) – selfawaresoup

2

Bạn có thể sử dụng toán tử bitwise.

Without:

echo 49/3; 
>> 16.333333333333 

Với "| 0" Bitwise:

echo 49/3 | 0; 
>> 16 
Các vấn đề liên quan