2014-11-04 32 views
9

Tôi là người mới bắt đầu trong lập trình và Python. Tôi đang thực hiện một số phép toán đơn giản. Vì vậy, 3/2 trong thông dịch viên Python cung cấp cho 1 như chúng ta biết. Nhưng -3/2 cho -2. Bạn có thể chỉ ra sự khác biệt ở đây không?Sự khác nhau giữa 3/2 và -3/2 là gì?

+4

'3/2' -> 1.5, làm tròn XUỐNG thành 1.' -3/2' -> -1.5, làm tròn XUỐNG thành -2. –

+0

Xem thêm http://stackoverflow.com/a/19518866/190597 để giải thích lý do tại sao Python làm tròn về phía vô cực âm. – unutbu

Trả lời

5

Trong Python 2, / thực hiện phép chia số nguyên. Điều này có nghĩa là kết quả, nếu nó không phải là số nguyên, là làm tròn xuống thành giá trị nguyên tiếp theo. Khi giá trị âm, giá trị này sẽ tự động làm tròn thành số âm lớn hơn.

Bằng trực giác, kết quả phân chia số nguyên đơn giản là số mathematical floor của kết quả phân chia phao. Vì lý do này, phân chia số nguyên cũng thường được gọi là floor division.

floor(1.5) # Returns 1.0 
floor(-1.5) # Returns -2.0 

Có thể thay đổi hành vi này trong Python 2 bằng cách đặt from __future__ import division ở phía trên cùng của mô-đun của bạn. Việc nhập này sẽ làm cho toán tử / chỉ hiển thị phân chia thực (phân chia nổi) và cho phép chia tầng rõ ràng (phân chia số nguyên) với toán tử //. Những ước là tiêu chuẩn bằng Python 3.

from __future__ import division 

print(3/2) # 1.5 
print(3//2) # 1 

Như @Dunes ghi chú trong các ý kiến, đó là đáng chú ý là - có độ ưu tiên cao hơn /, và do đó -3/2 tương đương với (-3)/2 hơn -(3/2). Nếu phân chia được áp dụng trước tiên, kết quả sẽ thực sự là -1.

+0

tôi nghĩ làm tròn xuống thường được gọi là 'tầng' +1 để giải thích nó tốt hơn tôi –

+0

Đáng chú ý rằng '-' là toán tử đơn nhất ở đây và liên kết chặt chẽ hơn toán tử phân chia. Nếu đó là một cách khác thì kết quả sẽ giống nhau. – Dunes

+0

Trong Python 3.4.2, 'int (-1.5)' trả về '-1'. –

4
-3/2 == -1.5 , floor(-1.5) = -2 

tương tự như vậy

3/2 == 1.5 , floor(1.5) = 1 
1

Python có hai toán tử phân chia.

  1. /

  2. //

Ở đây, // sẽ luôn tròn kết quả đến số nguyên gần nhất (không phụ thuộc vào loại toán hạng). Điều này được gọi là phân chia tầng. Nhưng / sẽ làm tròn đến số nguyên gần nhất, nếu cả hai toán hạng là số nguyên, thì nó sẽ phân chia thực tế nếu một trong hai toán hạng là một phao.

Sự khác biệt có thể được hiểu rõ ràng với ví dụ này,

>>> 11/4 
2 
>>> 11.0/4 
2.75 
>>> 11//4 
2 
>>> 11.0//4.0 
2.0 

Trích dẫn từ Python Documentation on floor division,

bộ phận toán học mà vòng xuống số nguyên gần nhất. Nhà điều hành phân chia tầng là //.Ví dụ: biểu thức 11 // 4 đánh giá là 2 trái ngược với số 2.7 5 được trả về bằng dấu phẩy thực sự. Lưu ý rằng (-11) // 4-3 vì đó là -2.75 được làm tròn xuống. Xem PEP 238.

Dòng cuối cùng trong văn bản được trích dẫn sẽ là câu trả lời cho câu hỏi thực tế của bạn.

+0

Chia tầng và làm tròn số nguyên gần nhất là hai khái niệm không tương đương. Trong Python 3.4.2, '5 // 3' sẽ sinh ra 1, và' vòng (5/3) 'sẽ sinh 2. Toán tử' // 'sẽ luôn tròn về phía cực âm. –

Các vấn đề liên quan