Làm thế nào để bạn làm tròn một nửa trong python?

Nhớ học làm tròn ở trường lớp? . Vấn đề duy nhất là tôi không thường xuyên sử dụng ý tưởng này. Kết quả là, tôi không phải lúc nào cũng nhớ cách làm tròn số trong ngữ cảnh lập trình như Python. May mắn thay, tôi đã tập hợp một bài viết nhỏ cho riêng mình. Hy vọng, bạn cũng nhận được một số giá trị từ nó

Hóa ra, có rất nhiều cách để làm tròn một số trong Python. Chẳng hạn, chúng ta có thể cắt bớt phân số hoàn toàn bằng cách sử dụng phép truyền thành int. `int()`trăn. Tất nhiên, có nhiều tùy chọn phức tạp hơn như hàm `round()`python làm tròn đến số chẵn gần nhất cho các giá trị ở giữa như 7. 5. Điều đó nói rằng, hãy thoải mái đưa ra giải pháp của riêng bạn. Tôi đã xây dựng giải pháp “làm tròn nửa vòng” của riêng mình bằng cách sử dụng toán tử bậc ba. `int(x +. 5) nếu x >= 0 khác int(x –. 5) `trăn. Kiểm tra phần còn lại của bài viết để biết chi tiết

Mục lục

1 Mô tả sự cố

2 Giải pháp

2. 1 Làm tròn bằng cách cắt ngắn

2. 2 Làm tròn theo Luồng điều khiển

2. 3 Làm tròn số học

2. 4 Làm tròn với hàm `round()`python

3 Hiệu suất

4 Thử thách

5 Tóm tắt nhỏ

Mô tả vấn đề

Làm tròn là một trong những phép toán mà chúng ta thường sử dụng trong cuộc sống hàng ngày. Chẳng hạn, tôi sử dụng Acorns để làm tròn các giao dịch mua của tôi thành số nguyên đô la gần nhất và thay mặt tôi đầu tư số tiền dư thừa

Thật không may, làm tròn số nguyên không phải là một hoạt động rõ ràng trong lập trình. Không có toán tử nào để làm tròn trong hầu hết các ngôn ngữ và tôi nghi ngờ sẽ không bao giờ có. Thay vào đó, chúng ta thường phải dựa vào thư viện hoặc cuộn riêng một cái

Để làm cho mọi thứ trở nên phức tạp hơn, làm tròn không phải lúc nào cũng là một phép toán rõ ràng. Ví dụ, làm thế nào để chúng ta biết khi nào nên làm tròn lên hoặc xuống? . 5 hoặc cao hơn

Hóa ra, có rất nhiều cách khác nhau để làm tròn một số nguyên. Trên thực tế, tôi đã tìm thấy bài viết thú vị này trên Thời báo Kỹ thuật Điện tử, trong đó nêu ra một số phương pháp làm tròn khác nhau

Làm thế nào để bạn làm tròn một nửa trong python?
. Tóm lại, đây là một vài lựa chọn.

  • Vòng về phía gần nhất. làm tròn đến số gần nhất (nhưng, còn. 5?)
  • nửa vòng. vòng về phía gần nhất. 5 vòng cách xa số 0 (e. g 4. 5 vòng đến 5)
  • Nửa vòng xuống. vòng về phía gần nhất. 5 vòng về không (e. g. 4. 5 vòng thành 4)
  • Tròn nửa chẵn. vòng về phía gần nhất. 5 vòng về phía số chẵn gần nhất (e. g. 4. 5 vòng thành 4 trong khi 5. 5 vòng đến 6)
  • Tròn nửa lẻ. vòng về phía gần nhất. 5 vòng về phía số lẻ gần nhất (e. g. 4. 5 hiệp thành 5 trong khi 5. 5. làm tròn thành 5)
  • luân phiên tròn. vòng về phía gần nhất. 5 luân phiên giữa làm tròn lên và xuống theo thời gian (e. g. 4. 5 vòng đến 5 rồi 5. 5 vòng đến 5)
  • Vòng ngẫu nhiên. vòng về phía gần nhất. 5 vòng lên hoặc xuống ngẫu nhiên (e. g 4. 5 có thể làm tròn thành 4 hoặc 5)
  • trần tròn. làm tròn tất cả các số thập phân về dương vô cực (e. g 4. 3 vòng thành 5 trong khi -4. 7 hiệp thành -4)
  • sàn tròn. làm tròn tất cả các số thập phân về âm vô cực (e. g. 4. 7 vòng thành 4 trong khi -4. 7 hiệp thành -5)
  • Làm tròn về không. làm tròn tất cả các số thập phân về 0 (e. g. 4. 7 vòng thành 4 trong khi -4. 7 hiệp thành -4)
  • Làm tròn từ 0. làm tròn tất cả các số thập phân cách xa số 0 (e. g. 4. 3 vòng thành 5 trong khi -4. 3 vòng đến -5)

Rõ ràng, có rất nhiều cách để làm tròn số. Đối với mục đích của bài viết này, chúng tôi sẽ sử dụng phương pháp "làm tròn nửa số". Nói cách khác, các số như 3. 5, 5. 5 và -2. 5 sẽ lần lượt làm tròn thành 4, 6 và -3

Các giải pháp

Trong bài viết này, chúng ta sẽ xem xét một số cách khác nhau để làm tròn số trong Python. Như mọi khi, chúng ta sẽ bắt đầu với các giải pháp đơn giản hoặc mạnh mẽ. Sau đó, chúng tôi sẽ chuyển qua các giải pháp phổ biến hơn

Làm tròn bằng cách cắt bớt

Một cách để làm tròn một số là cắt bỏ chữ số thập phân thông qua phép cắt ngắn

x = int(5.3)  # stores 5

Trong ví dụ này, `x`python sẽ lưu trữ 5 khi chúng tôi cắt bỏ. 3. Nếu chúng tôi thay đổi giá trị ví dụ thành thứ gì đó sẽ làm tròn lên, chúng tôi sẽ thất vọng

x = int(5.7)  # stores 5

Rõ ràng, đây không phải là giải pháp “làm tròn nửa số” mà chúng ta đã thảo luận ở trên, nhưng đó là một lối tắt hay nếu chúng ta chỉ cần xóa chữ số thập phân (i. e. “làm tròn về 0”)

Điều đó nói rằng, sự đơn giản của giải pháp này mang lại cho chúng tôi một lợi ích tốt đẹp. cắt ngắn cũng hoạt động cho các số âm

x = int(-5.7)  # stores -5

Tất nhiên, nếu chúng ta muốn một giải pháp “làm tròn nửa vời” thực sự, chúng ta sẽ cần thử một thứ khác

Làm tròn theo luồng điều khiển

Nếu chúng ta nghĩ về cách hoạt động của "làm tròn nửa vòng", thì có lẽ chúng ta có thể ghép một số câu lệnh if lại với nhau để hoàn thành nó

x = 5.3
fraction = x - int(x)
if abs(fraction) >= .5:
  offset = 1 - fraction
  x = x + offset
else:
  x = x - fraction

Ở đây, chúng ta có thể tính phần phân số của một số bằng cách sử dụng giải pháp cắt bớt trước đây của chúng ta. Nói cách khác, chúng ta có thể trừ giá trị bị cắt khỏi giá trị thực tế để lấy phân số. Trong trường hợp này, `int(x)`python sẽ trả về 5 mà chúng ta sẽ trừ đi 5. 3. Kết quả là, `fraction`python lưu trữ. 3 (là)

Sau đó, chúng ta có thể sử dụng phân số đó để thực hiện một số luồng điều khiển. Chẳng hạn, nếu giá trị tuyệt đối của `phân số`python lớn hơn hoặc bằng. 5, chúng tôi biết chúng tôi cần phải làm tròn lên. Ở đây, giá trị tuyệt đối giải thích cho thực tế là `phân số`python có thể dương hoặc âm. Nếu không, chúng ta có thể phải viết một câu lệnh if khó chịu hơn một chút. Nếu bạn muốn tìm hiểu thêm về tính toán giá trị tuyệt đối trong Python, tôi có một bài viết riêng về điều đó

Bằng mọi giá, để làm tròn một số lên, chúng ta cần tính khoảng cách đến số tiếp theo mà chúng ta gọi là `offset`python. Chúng ta có thể tính toán điều đó bằng cách trừ `phân số`python từ 1. Bây giờ, vấn đề chỉ là thêm phần bù vào `x`python và chúng ta đã hoàn tất

Mặt khác, nếu chúng ta thấy rằng giá trị tuyệt đối của `phân số`python thực sự nhỏ hơn. 5, chúng ta có thể trừ trực tiếp phân số đó từ `x`python. Điều này sẽ hoạt động bất kể `x`python là dương hay âm

Nếu chúng ta muốn đi xa hơn, chúng ta có thể truyền `x`python thành một số nguyên. Điều đó nói rằng, điều này sẽ hoàn thành công việc — loại bỏ mọi lỗi làm tròn khó chịu

Làm tròn số học

Một cách thực sự thông minh khác để “làm tròn nửa chừng” là tận dụng giải pháp cắt bớt từ phía trên với một sửa đổi nhỏ

x = int(5.3 + .5)

Ở đây, chúng tôi đã thêm. 5 trực tiếp tới `x`python. Nếu phần phân số của `x`python xảy ra là. 5 trở lên, `x`python sẽ chuyển sang số tiếp theo. Sau đó, khi chúng tôi cắt bớt `x`python, chúng tôi sẽ làm tròn nó thành công

Mặt khác, nếu phần phân số của `x`python ở bên dưới. 5, toàn bộ phần số của `x`python sẽ giữ nguyên. Do đó, việc cắt bớt `x`python sẽ có tác dụng làm tròn số

Thật không may, giải pháp này sẽ không hoạt động khi `x`python là số âm. Để xử lý trường hợp đó, chúng tôi sẽ cần một số loại chi nhánh. Bởi vì tôi lười biếng và tôi thích một lớp lót, tôi sẽ chọn loại ba

x = 5.3
int(x + .5) if x >= 0 else int(x - .5)

Bây giờ, nếu `x`python âm, chúng ta sẽ trừ. 5 thay vì thêm nó. Nếu có một giải pháp thông minh hơn, hãy cho tôi biết trong phần bình luận

Làm tròn Với Hàm `round()`python

Nếu viết một thuật toán làm tròn bằng tay là điều không cần thiết, thì Python thực sự cung cấp một hàm làm tròn tích hợp sẵn

round(5.3)

Thật không may, hành vi của nó không hoàn toàn phù hợp với thuật toán “làm tròn một nửa” của chúng tôi. Thay vào đó, nó phức tạp hơn một chút. Hãy xem xét một vài ví dụ

>>> round(.5)
0
>>> round(-.5)
0
>>> round(1.5)
2
>>> round(2.5)
2
>>> round(3.5)
4
>>> round(-1.5)
-2
>>> round(-2.5)
-2
>>> round(-3.5)
-4

Nếu nhìn lại danh sách các thuật toán làm tròn của mình, chúng ta sẽ thấy rằng các nhà phát triển Python đã thực sự triển khai thuật toán “làm tròn nửa chẵn”. Khi thực hiện một số nghiên cứu về thuật toán này, tôi thấy rằng đôi khi thuật toán này được gọi là làm tròn nhân viên ngân hàng

Làm thế nào để bạn làm tròn một nửa trong python?
—bạn càng biết nhiều.

Thành thật mà nói, không có gì khác để nói về giải pháp này. Tuy nhiên, điều quan trọng cần lưu ý là hàm round trong Python thực sự cũng có thể hoạt động đối với các giá trị dấu phẩy động. Ví dụ: chúng ta có thể làm tròn đến hàng phần mười như sau

________số 8

Làm thế nào là mát mẻ đó?

Hiệu suất

Với các giải pháp đã có sẵn, hãy xem cách chúng hoạt động. Để làm điều đó, chúng tôi sẽ cần nắm bắt từng giải pháp trong một chuỗi

setup = """
x = 2.5
"""

truncation = """
int(x)
"""

control_flow = """
fraction = x - int(x)
if abs(fraction) >= .5:
  offset = 1 - fraction
  x + offset
else:
  x - fraction
"""

arithmetic = """
int(x + .5) if x >= 0 else int(x - .5)
"""

banker = """
round(x)
"""

Khi các chuỗi của chúng tôi đã sẵn sàng hoạt động, tất cả những gì chúng tôi cần làm là tải vào thư viện `timeit`python và khởi chạy các thử nghiệm của chúng tôi

x = int(5.7)  # stores 5
0

Có lẽ không có gì đáng ngạc nhiên, cắt ngắn chiến thắng trong cuộc thi tốc độ. Tuy nhiên, chức năng `round()`python tích hợp thực sự khá nhanh. Tôi tưởng tượng đó là vì chức năng được triển khai bằng ngôn ngữ cấp thấp hơn

Như mọi khi, hãy thực hiện các phép đo này với một chút muối. Tôi đã chạy từng cái trên máy Windows 10 với Python 3. 7. 3. Ngoài ra, nếu bạn quan tâm đến quá trình kiểm tra hiệu suất này, tôi có cả một bài viết về nó

Thách đấu

Khi nói đến làm tròn, có rất nhiều thuật toán khác nhau. Và đối với mỗi thuật toán, có thể có hàng ngàn ngữ cảnh mà chúng được sử dụng. Đương nhiên, tôi nghĩ sẽ rất thú vị nếu bạn áp dụng thuật toán làm tròn vào một trong những ngữ cảnh đó, nhưng tôi cho rằng sẽ thú vị hơn nếu tìm hiểu các thuật toán làm tròn khác thay vào đó

Đối với thử thách này, tôi yêu cầu bạn thực hiện thuật toán làm tròn ngân hàng (hoặc bạn có thể tự nghĩ ra thuật toán của riêng mình giống như tôi đã “làm”). Nếu bạn chọn gắn bó với thuật toán làm tròn ngân hàng, hãy bọc nó trong một hàm và kiểm tra nó trên các đầu vào sau

Mô tảInputOutputNear Zero0. 50Trường hợp tiêu chuẩn0. 71Vỏ Tiêu chuẩn1. 21Làm tròn chẵn1. 52Làm tròn chẵn xuống2. 52Làm tròn chẵn-1. 5-2Chẵn làm tròn xuống âm-2. 5-2

Sau đó, khi bạn đã sẵn sàng, hãy chia sẻ giải pháp của mình trên Twitter. Đừng quên gắn thẻ giải pháp của bạn #RenegadePython

Làm thế nào để bạn làm tròn một nửa trong python?
. Để bắt đầu, đây là giải pháp của tôi bằng cách sử dụng các hàm sàn và trần của lớp toán học.

Trong bài viết làm tròn số của mình, tôi đã yêu cầu bạn triển khai thuật toán làm tròn của riêng mình. Đây là tôi gian lận với hàm sàn và trần của lớp toán. Vui lòng tham gia thử thách này bằng cách sử dụng #RenegadePython

Làm thế nào để bạn làm tròn một nửa trong python?
. ảnh. Twitter. com/cJOncwkVxd
Làm thế nào để bạn làm tròn một nửa trong python?

– Jeremy Grifski (@ RenegadeCoder94) ngày 7 tháng 6 năm 2020
Làm thế nào để bạn làm tròn một nửa trong python?

Tôi rất vui khi thấy những gì bạn nghĩ ra

Tóm tắt một chút

Cuối cùng, chúng tôi đã đi đến cuối bài viết này. Như mọi khi, đây là danh sách từng giải pháp được sử dụng trong bài viết này

x = int(5.7)  # stores 5
1

Nếu bạn nhận được bất kỳ giá trị nào từ bài viết này, hãy cân nhắc hỗ trợ The Renegade Coder bằng cách chuyển đến danh sách các cách giúp phát triển trang web của tôi. Nếu không, hãy cân nhắc kiểm tra một số tài nguyên Python này trên Amazon (quảng cáo)

  • Làm toán với Python. Sử dụng lập trình để khám phá đại số, thống kê, giải tích, v.v.
    Làm thế nào để bạn làm tròn một nửa trong python?
  • Sân chơi Python. Các dự án táo bạo dành cho lập trình viên tò mò
    Làm thế nào để bạn làm tròn một nửa trong python?

Ngoài ra, bạn có thể tìm thấy giá trị trong các bài viết liên quan sau đây

  • Cách tính giá trị tuyệt đối trong Python
  • Toán tử còn lại hoạt động trên nhân đôi trong Java

Với tất cả những gì đã nói, cảm ơn vì đã ghé qua. Hy vọng sẽ sớm gặp lại bạn ở đây

Cách sử dụng Python (41 bài viết)—Dòng điều hướng

Loạt bài hướng dẫn Làm thế nào để Python khác với các bài viết viết mã chuyên sâu thông thường bằng cách khám phá các vấn đề có kích thước byte trong Python. Trong loạt bài này, học sinh sẽ đi sâu vào các chủ đề độc đáo như Cách đảo ngược từ điển, Cách tính tổng các phần tử của hai danh sách và Cách kiểm tra xem tệp có tồn tại không

Mỗi vấn đề được khám phá từ cách tiếp cận ngây thơ đến giải pháp lý tưởng. Thỉnh thoảng, cũng sẽ có một số giải pháp chỉ để cho vui. Ở cuối mỗi bài viết, bạn sẽ tìm thấy một bản tóm tắt đầy đủ các đoạn mã để bạn sử dụng. Đừng ngại lấy những gì bạn cần

Nếu bạn không chắc nên bắt đầu từ đâu, tôi khuyên bạn nên xem danh sách Đoạn mã Python cho các vấn đề hàng ngày của chúng tôi. Ngoài ra, bạn có thể tìm thấy một số đoạn trích ở định dạng sổ ghi chép Jupyter trên GitHub

Làm thế nào để bạn làm tròn một nửa trong python?
,

Nếu bạn có một vấn đề của riêng bạn, xin vui lòng hỏi. Một người khác có thể có cùng một vấn đề. Thưởng thức cách sử dụng Python

Tại sao. 5 vòng xuống Python?

Như thường lệ, Stack Overflow đã có câu trả lời. vòng trăn. 5 xuống đôi khi do Làm tròn của Banker , còn được biết đến với cái tên thông tin hơn là "Làm tròn nửa đến chẵn". Python sẽ làm tròn. 5 số đến số chẵn gần nhất.

Làm. 5 làm tròn lên hay xuống?

Nếu số bạn đang làm tròn theo sau là 5, 6, 7, 8 hoặc 9, hãy làm tròn số lên . Ví dụ. 38 làm tròn đến hàng chục là 40. Nếu số bạn đang làm tròn được theo sau bởi 0, 1, 2, 3 hoặc 4, hãy làm tròn số xuống.