Tại sao lại phép tính đơn giản này 0Tại sao Python trả về 0 để tính toán phân chia đơn giản?
>>> 25/100*50
0
trong khi điều này thực sự tính toán một cách chính xác?
>>> .25*50
12.5
>>> 10/2*2
10
Điều gì sai với ví dụ đầu tiên?
Tại sao lại phép tính đơn giản này 0Tại sao Python trả về 0 để tính toán phân chia đơn giản?
>>> 25/100*50
0
trong khi điều này thực sự tính toán một cách chính xác?
>>> .25*50
12.5
>>> 10/2*2
10
Điều gì sai với ví dụ đầu tiên?
Trong Python 2, 25/100
bằng 0 khi thực hiện một số nguyên divison. vì kết quả nhỏ hơn 1
.
Bạn có thể "khắc phục" điều này bằng cách thêm from __future__ import division
vào tập lệnh của mình. Điều này sẽ luôn luôn thực hiện một phân chia nổi khi sử dụng toán tử /
và sử dụng //
để chia số nguyên.
Một tùy chọn khác sẽ làm cho ít nhất một trong số các toán hạng một phao, ví dụ: 25.0/100
.
Trong Python 3, 25/100
luôn là 0.25
.
25/100
là phép tính số nguyên làm tròn (bằng cách cắt ngắn) thành 0
.
Đây là vấn đề về số nguyên cắt ngắn (tức là, bất kỳ phần phân số nào của một số đều bị hủy). Vì vậy:
25/100
cho 0
Tuy nhiên, chừng nào ít nhất một của toán hạng trong bộ phận là một float, bạn sẽ nhận được một kết quả float:
25/100.0
hoặc 25.0/100
hoặc 25.0/100.0
tất cả cung cấp cho 0.25
Làm thế nào để thực hiện điều này trong trường hợp các số được lưu trữ trong một biến? Ví dụ x/y, trong đó x = 4 và y = 3. Hoặc x = someObject.size. – altabq
Một cách để làm điều đó là tp nhân một trong những con số với 1.0. Ví dụ: '1.0 * x/2' hoặc bạn có thể thực hiện' float (x)/2' - có thể có các cách khác, nhưng chúng xuất hiện trong đầu của tôi. Bạn luôn có thể xác minh tương tác kết quả của mình trước khi mã hóa chúng trong một chương trình. Hy vọng rằng sẽ giúp. – Levon
Có, cảm ơn bạn đã trả lời! – altabq
Nitpicking nhẹ, không làm tròn quá nhiều như cắt xén. – Levon
@Levon Đó là một hình thức làm tròn, nhưng có. – Marcin