Hướng dẫn how do you round to 4 decimal places in python? - làm thế nào để bạn làm tròn đến 4 chữ số thập phân trong python?

Hàm

round(number, ndigits)
5 trả về một số điểm nổi được làm tròn vào số số thập phân được chỉ định.

Thí dụ

number = 13.46

# round 13.46 to the nearest integer rounded_number = round(number)

print(rounded_number) # Output: 13


vòng () cú pháp

Cú pháp của hàm

round(number, ndigits)
5 là:

round(number, ndigits)

tham số vòng ()

Hàm

round(number, ndigits)
5 có hai tham số:

  • Số - Số được làm tròn - the number to be rounded
  • ndigits (tùy chọn) - số lên mà số đã cho được làm tròn; mặc định là 0 - number up to which the given number is rounded; defaults to 0

vòng () giá trị trả về

Hàm vòng () trả về

  • Số nguyên gần nhất với số đã cho nếu
    round(number, ndigits)
    8 không được cung cấp
  • số được làm tròn đến
    round(number, ndigits)
    8 chữ số nếu
    round(number, ndigits)
    8 được cung cấp

Ví dụ 1: Làm thế nào vòng () hoạt động trong Python?

# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

Đầu ra

10
11
6

Ví dụ 2: Vòng một số cho số lượng số thập phân đã cho

print(round(2.665, 2))
print(round(2.675, 2))

Đầu ra

2.67
2.67

Ví dụ 2: Vòng một số cho số lượng số thập phân đã cho: The behavior of

round(number, ndigits)
5 for floats can be surprising. Notice
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

2 gives
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

3 instead of the expected
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

4. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a float.

Lưu ý: Hành vi của

round(number, ndigits)
5 đối với phao có thể gây ngạc nhiên. Thông báo
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

2 cung cấp
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

3 thay vì dự kiến ​​
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

4. Đây không phải là một lỗi: đó là kết quả của thực tế là hầu hết các phân số thập phân không thể được biểu diễn chính xác dưới dạng phao.

2.67499999999999982236431605997495353221893310546875

Khi thập phân

# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

5 được chuyển đổi thành số dấu phẩy động nhị phân, nó lại được thay thế bằng xấp xỉ nhị phân, có giá trị chính xác là:

Do đó, nó được làm tròn xuống còn 2,67.

from decimal import Decimal

# normal float
num = 2.675

print(round(num, 2))

# using decimal.Decimal (passed float as string for precision) num = Decimal('2.675')

print(round(num, 2))

Đầu ra

2.67
2.68

Tôi cảm thấy buộc phải cung cấp một đối trọng với câu trả lời của Ashwini Chaudhary. Mặc dù xuất hiện, hình thức hai đối số của hàm

# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

7 không làm tròn một con trăn nổi vào một số vị trí thập phân nhất định và nó thường không phải là giải pháp bạn muốn, ngay cả khi bạn nghĩ đó là. Hãy để tôi giải thích...

Khả năng làm tròn (python) nổi vào một số vị trí thập phân là thứ thường được yêu cầu, nhưng hóa ra hiếm khi là những gì thực sự cần thiết. Câu trả lời đơn giản

# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

8 là một thứ gây phiền toái hấp dẫn: có vẻ như nó làm những gì bạn muốn, nhưng nhờ thực tế là những chiếc phao Python được lưu trữ bên trong nhị phân, nó đang làm một cái gì đó khá tinh vi hơn. Xem xét ví dụ sau:

>>> round(52.15, 1)
52.1

Với sự hiểu biết ngây thơ về những gì

# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

7 làm, điều này có vẻ sai: Chắc chắn nó sẽ làm tròn lên đến
10
11
6
0 chứ không phải xuống
10
11
6
1? Để hiểu tại sao những hành vi như vậy không thể dựa vào, bạn cần đánh giá cao rằng trong khi điều này trông giống như một hoạt động thập phân đơn giản, nó không đơn giản.

Vì vậy, đây là những gì thực sự xảy ra trong ví dụ trên. . Vì vậy, để có được từ số nguyên chữ gốc đến đầu ra được hiển thị, máy móc cơ bản đã thực hiện bốn chuyển đổi riêng biệt giữa các định dạng nhị phân và thập phân, hai theo mỗi hướng. Phá vỡ nó xuống (và với những từ chối thông thường về giả sử định dạng nhị phân của IEEE 754, các quy tắc tròn đến chay-crom-chay và IEEE 754):

  1. Đầu tiên, chữ số

    10
    11
    6
    3 được phân tích cú pháp và chuyển đổi thành phao python. Số thực tế được lưu trữ là
    10
    11
    6
    4, hoặc
    10
    11
    6
    5.

  2. Bên trong bước đầu tiên của hoạt động

    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    7, Python tính toán chuỗi thập phân 1 chữ số gần nhất với số được lưu trữ. Vì số được lưu trữ đó là một liên lạc dưới giá trị ban đầu là
    10
    11
    6
    3, chúng tôi cuối cùng đã làm tròn xuống và nhận được một chuỗi
    10
    11
    6
    1. Điều này giải thích lý do tại sao chúng tôi nhận được
    10
    11
    6
    1 là đầu ra cuối cùng thay vì
    10
    11
    6
    0.

  3. Sau đó, trong bước thứ hai của hoạt động

    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    7, Python biến chuỗi đó trở lại thành một chiếc phao, nhận số điểm nổi nhị phân gần nhất thành
    10
    11
    6
    1, hiện là
    print(round(2.665, 2))
    print(round(2.675, 2))
    3 hoặc
    print(round(2.665, 2))
    print(round(2.675, 2))
    4.

  4. Cuối cùng, là một phần của vòng lặp in-eval (repl) của Python, giá trị dấu phẩy động được hiển thị (theo số thập phân). Điều đó liên quan đến việc chuyển đổi giá trị nhị phân trở lại một chuỗi thập phân, nhận

    10
    11
    6
    1 làm đầu ra cuối cùng.

Trong Python 2.7 và sau đó, chúng ta có tình huống dễ chịu rằng hai chuyển đổi trong bước 3 và 4 hủy bỏ nhau. Đó là do sự lựa chọn của Python về việc triển khai

print(round(2.665, 2))
print(round(2.675, 2))
6, tạo ra giá trị thập phân ngắn nhất được đảm bảo để làm tròn chính xác cho phao thực tế. Một hậu quả của lựa chọn đó là nếu bạn bắt đầu với bất kỳ số thập phân (không quá lớn, không quá nhỏ) với 15 hoặc ít hơn các chữ số có ý nghĩa thì phao tương ứng sẽ được hiển thị hiển thị các chữ số chính xác đó:

round(number, ndigits)
0

Thật không may, điều này làm tăng thêm ảo tưởng rằng Python đang lưu trữ các giá trị theo số thập phân. Không phải như vậy trong Python 2.6, mặc dù! Đây là ví dụ ban đầu được thực hiện trong Python 2.6:

round(number, ndigits)
1

Chúng tôi không chỉ làm tròn theo hướng ngược lại, nhận

10
11
6
0 thay vì
10
11
6
1, mà giá trị được hiển thị thậm chí không in là
10
11
6
0! Hành vi này đã gây ra nhiều báo cáo cho trình theo dõi lỗi Python dọc theo các dòng "Vòng bị phá vỡ!". Nhưng đó không phải là
# for integers

print(round(10))

# for floating point

print(round(10.7))

# even choice

print(round(5.5))

7 bị hỏng, đó là kỳ vọng của người dùng. .

Phiên bản ngắn: Nếu bạn đang sử dụng vòng hai đối số và bạn đang mong đợi hành vi có thể dự đoán được từ một xấp xỉ nhị phân đến một vòng thập phân của một xấp xỉ nhị phân với một trường hợp nửa thập phân, bạn đang gặp rắc rối.

Vì vậy, đủ với cuộc tranh luận "hai đối số là xấu". Thay vào đó, bạn nên sử dụng cái gì? Có một vài khả năng, tùy thuộc vào những gì bạn đang cố gắng làm.

  • Nếu bạn làm tròn cho mục đích hiển thị, thì bạn không muốn có kết quả nổi; Bạn muốn một chuỗi. Trong trường hợp đó, câu trả lời là sử dụng định dạng chuỗi:

    round(number, ndigits)
    2

    Ngay cả sau đó, người ta phải nhận thức được biểu diễn nhị phân nội bộ để không ngạc nhiên trước hành vi của các trường hợp nửa chừng trong thập phân rõ ràng.

    round(number, ndigits)
    3
  • Nếu bạn đang hoạt động trong một bối cảnh mà vấn đề quan trọng là các trường hợp nửa chừng trong thập phân được làm tròn (ví dụ: trong một số bối cảnh tài chính), bạn có thể muốn thể hiện số của mình bằng cách sử dụng loại

    2.67
    2.67
    2. Thực hiện một vòng thập phân trên loại
    2.67
    2.67
    2 có ý nghĩa hơn nhiều so với loại nhị phân (không kém, làm tròn đến một số lượng cố định của các địa điểm nhị phân có ý nghĩa hoàn hảo trên một loại nhị phân). Hơn nữa, mô -đun
    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    6 cho phép bạn kiểm soát tốt hơn chế độ làm tròn. Trong Python 3,
    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    7 thực hiện công việc trực tiếp. Trong Python 2, bạn cần phương pháp
    2.67
    2.67
    6.

    round(number, ndigits)
    4
  • Trong những trường hợp hiếm hoi, phiên bản hai đối số của

    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    7 thực sự là những gì bạn muốn: có lẽ bạn đang nổi nổi vào các thùng có kích thước
    2.67
    2.67
    8 và bạn không đặc biệt quan tâm đến các trường hợp biên giới đi theo cách nào. Tuy nhiên, những trường hợp này rất hiếm và rất khó để biện minh cho sự tồn tại của phiên bản hai đối số của
    # for integers
    

    print(round(10))

    # for floating point

    print(round(10.7))

    # even choice

    print(round(5.5))

    7 tích hợp dựa trên những trường hợp đó.