Hướng dẫn why does python division return float? - tại sao phân chia python trả về float?

Câu trả lời được chấp nhận đã đề cập đến PEP 238. Tôi chỉ muốn thêm một cái nhìn nhanh chóng đằng sau hậu trường cho những người quan tâm đến những gì đang diễn ra mà không cần đọc toàn bộ PEP.

Các nhà khai thác bản đồ Python như

from __future__ import division
1,
from __future__ import division
2,
from __future__ import division
3 và
from __future__ import division
4 cho các chức năng đặc biệt, như vậy, ví dụ:
from __future__ import division
5 tương đương với

a.__add__(b)

Về sự phân chia trong Python 2, theo mặc định chỉ có

from __future__ import division
4 ánh xạ tới
from __future__ import division
7 và kết quả phụ thuộc vào các loại đầu vào (ví dụ:
from __future__ import division
8,
from __future__ import division
9).

Python 2.2 đã giới thiệu tính năng

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
0
# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
1, đã thay đổi ngữ nghĩa phân chia theo cách sau (TL; DR của PEP 238):

  • from __future__ import division
    
    4 Bản đồ thành
    # Two float values
    >> 7.0 // 2.0
    3.0
    
    # A single float value
    >> 7 // 2.0
    3.0
    
    # Two integers
    >>  7 // 2
    3
    3 phải "trả lại xấp xỉ hợp lý về kết quả toán học của bộ phận" (trích dẫn từ PEP 238)
  • # Two float values
    >> 7.0 // 2.0
    3.0
    
    # A single float value
    >> 7 // 2.0
    3.0
    
    # Two integers
    >>  7 // 2
    3
    4 Bản đồ thành
    # Two float values
    >> 7.0 // 2.0
    3.0
    
    # A single float value
    >> 7 // 2.0
    3.0
    
    # Two integers
    >>  7 // 2
    3
    5, sẽ trả lại kết quả của
    from __future__ import division
    
    4

Với Python 3.0, những thay đổi của PEP 238 đã trở thành hành vi mặc định và không có phương pháp đặc biệt nào nữa

from __future__ import division
7 trong mô hình đối tượng của Python.

Nếu bạn muốn sử dụng cùng một mã trong Python 2 và Python 3

from __future__ import division

và dính vào ngữ nghĩa PEP 238 của

from __future__ import division
4 và
# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4.

Trong bài đăng này, bạn sẽ học Python 3 Division, cũng như một số điều kỳ quặc bất ngờ của nó. Bạn sẽ học cách sử dụng cả phương pháp số nguyên và sàn, cũng như cách diễn giải một số kết quả ít được mong đợi của nó.

  • Phân khu Python - Những cách khác nhau
  • Phân chia sàn Python
  • Phân chia phao Python
  • Sự kết luận

Phân khu Python - Những cách khác nhau

Phân chia sàn Python

  • Phân chia phao Pythonfloating point value.
  • Sự kết luậnfloored integer or floating point value.

Python có hai toán tử phân chia khác nhau,

from __future__ import division
4 và
# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.floor value.

Toán tử Slash

from __future__ import division
4 đơn lẻ được gọi là Phân chia Float, trả về giá trị điểm nổi.

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3

Mặt khác, toán tử chém gấp đôi

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4 trả về giá trị không có giá trị, cụ thể là một số nguyên hoặc giá trị điểm nổi.

>> -7.0 // 3
-3.0

Phân chia sàn Python, sử dụng toán tử

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4, hoạt động bằng cách trả lại giá trị nổi của thương số của nó. Điều này hoạt động khác với phân chia số nguyên sẽ làm tròn số. Thay vào đó, điều này hoạt động bằng cách trả lại giá trị sàn.

Phân chia phao Python

Sự kết luận

# Two integers
>> 7 / 3
2.33

# One floating point value
>> 7.0 / 3
2.33

# Two floating point values
>> 7.0 / 3.0
2.33

Python có hai toán tử phân chia khác nhau,

from __future__ import division
4 và
# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.

Sự kết luận

Python có hai toán tử phân chia khác nhau,

from __future__ import division
4 và
# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.

Toán tử Slash

from __future__ import division
4 đơn lẻ được gọi là Phân chia Float, trả về giá trị điểm nổi.

Mặt khác, toán tử chém gấp đôi

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
4 trả về giá trị không có giá trị, cụ thể là một số nguyên hoặc giá trị điểm nổi.

  • Phân chia sàn Python, sử dụng toán tử
    # Two float values
    >> 7.0 // 2.0
    3.0
    
    # A single float value
    >> 7 // 2.0
    3.0
    
    # Two integers
    >>  7 // 2
    3
    4, hoạt động bằng cách trả lại giá trị nổi của thương số của nó. Điều này hoạt động khác với phân chia số nguyên sẽ làm tròn số. Thay vào đó, điều này hoạt động bằng cách trả lại giá trị sàn.
  • Hãy cùng xem cách thức hoạt động của nó trong hành động, bằng cách xem xét một vài ví dụ:
  • Một lưu ý thú vị về điều này là những gì xảy ra với các số âm:

Trong Python, có hai loại phân chia: phân chia số nguyên và phân chia phao.

Phân chia số nguyên

Bộ phận số nguyên trả lại sàn của bộ phận. Đó là, các giá trị sau điểm thập phân bị loại bỏ. Nó được viết là '//' trong Python 3. Vì vậy, 1 // 3 = 0, 2 // 3 = 0 và 3 // 3 = 1. Các giá trị số nguyên được lưu trữ chính xác, vì vậy chúng an toàn để sử dụng trong so sánh.

Trong Python 2, toán tử '//' không được bao gồm, do đó, nó phải được nhập từ mô -đun

# Two float values
>> 7.0 // 2.0
3.0

# A single float value
>> 7 // 2.0
3.0

# Two integers
>>  7 // 2
3
0. Xem mã bên dưới để biết cách sử dụng toán tử '//' trong Python 2. Toán tử '/' trong Python 2 trả về kết quả số nguyên nếu cả hai toán hạng là số nguyên.

Python 2

# Python 2 integer division using '//'
from __future__ import division
print 4//3  # prints 1

hoặc

# Python 2 integer division using '/'
print 4/3  # prints 1

Python 3

# Python 3 integer division
print(4//3) # prints 1

Xem __future__ để biết tài liệu của mô -đun.

Giải quyết vấn đề. Only a certain number of values after the decimal can be stored, so it is not possible to store an exact binary representation of many floating point numbers. This sometimes leads to problems when comparing numbers or when rounding.

Tại sao bộ phận của tôi không làm việc trong Python?

Python 2

from __future__ import division

# floating point division using __future__ syntax
print 4 / 3 # prints 1.33333333333

hoặc

# floating point division using a float to force float result
# no need to import from __future__

print 4 / 3.0 # prints 1.33333333333

Python 3

from __future__ import division
0

Xem __future__ để biết tài liệu của mô -đun.__future__ for documentation of the module.

Giải quyết vấn đề

Tại sao bộ phận của tôi không làm việc trong Python?

Một đầu vào từ người dùng là một chuỗi theo mặc định.Để thực hiện các hoạt động toán học trên đầu vào, bạn cần thay đổi nó thành một số nguyên hoặc phao sử dụng int () hoặc float () tương ứng.. In order to perform mathematical operations on an input, you need to either change it to an integer or a float using int() or float() respectively.

Bộ phận trở lại trong Python là gì?

Trong Python, có hai loại toán tử phân chia: /: chia số bên trái cho số bên phải của nó và trả về giá trị điểm nổi.//: Chia số ở bên trái cho số bên phải của nó, làm tròn câu trả lời và trả về một số toàn bộ.a floating point value. // : Divides the number on its left by the number on its right, rounds down the answer, and returns a whole number.

Python có phân chia nổi không?

Trong Python 3, "/" Đồng đều hoạt động như một toán tử phân chia nổi.Vì vậy, nó luôn trả về loại float: 10/3 trả về 3.333333 thay vì 3, 6/3 trả về 2.0 thay vì 2."/" uniformly works as a float division operator. So, it always returns the float type: 10/3 returns 3.333333 instead of 3, 6/3 returns 2.0 instead of 2.

Python có tự động sử dụng phao không?

Nếu số của bạn có số thập phân, Python sẽ tự động coi đó là một chiếc phao.Nếu nó không, nó sẽ tự động coi đó là một số nguyên.. If it does not, it will automatically consider it an integer.