Hướng dẫn how do you round to hundreds in python? - làm thế nào để bạn làm tròn đến hàng trăm trong python?

Làm tròn thường được thực hiện trên các số điểm nổi và ở đây có ba hàm cơ bản bạn nên biết:

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
5 (vòng vào số nguyên gần nhất),
>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
6 (luôn luôn làm tròn) và
>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
7 (luôn luôn làm tròn).

Show

Bạn hỏi về các số nguyên và làm tròn lên đến hàng trăm, nhưng chúng tôi vẫn có thể sử dụng

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
7 miễn là số của bạn nhỏ hơn 253. Để sử dụng
>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
7, chúng tôi chỉ chia cho 100 đầu tiên, làm tròn và nhân với 100 sau đó:

>>> import math
>>> def roundup(x):
...     return int(math.ceil(x / 100.0)) * 100
... 
>>> roundup(100)
100
>>> roundup(101)
200

Chia cho 100 đầu tiên và nhân với 100 "dịch chuyển" hai chữ số thập phân ở bên phải và bên trái để

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
7 hoạt động trên hàng trăm. Bạn có thể sử dụng
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
1 thay vì 100 nếu bạn muốn làm tròn đến hàng chục (
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
2), hàng ngàn (
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
3), v.v.

Một cách khác để làm điều này là tránh các số điểm nổi (chúng có độ chính xác hạn chế) và thay vào đó chỉ sử dụng số nguyên. Các số nguyên có độ chính xác tùy ý trong Python, vì vậy điều này cho phép bạn làm tròn số lượng ở mọi kích thước. Quy tắc làm tròn rất đơn giản: Tìm phần còn lại sau khi phân chia với 100 và thêm 100 trừ phần còn lại này nếu không khác:

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100

Điều này hoạt động cho các số có bất kỳ kích thước nào:

>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L

Tôi đã thực hiện một điểm chuẩn nhỏ của hai giải pháp:

$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop

Dung dịch nguyên tinh khiết nhanh hơn theo hệ số hai so với dung dịch

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
7.

Thomas đã đề xuất một giải pháp dựa trên số nguyên giống hệt với giải pháp tôi có ở trên, ngoại trừ việc nó sử dụng một thủ thuật bằng cách nhân các giá trị boolean. Thật thú vị khi thấy rằng không có lợi thế tốc độ của việc viết mã theo cách này:

$ python -m timeit -s 'x = 130' 'x + 100*(x%100>0) - x%100'
10000000 loops, best of 3: 0.167 usec per loop

Như một nhận xét cuối cùng, tôi cũng lưu ý rằng, nếu bạn muốn làm tròn 101 bóng149 đến 100 và vòng 150. :

>>> int(round(130, -2))
100
>>> int(round(170, -2))
200

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

Lưu ý: Hành vi của >>> roundup(100) 100 >>> roundup(130) 200 >>> roundup(1234567891234567891) 1234567891234567900L 6 đối với phao có thể gây ngạc nhiên. Thông báo $ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100' 1000000 loops, best of 3: 0.364 usec per loop $ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100' 10000000 loops, best of 3: 0.162 usec per loop 3 cung cấp $ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100' 1000000 loops, best of 3: 0.364 usec per loop $ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100' 10000000 loops, best of 3: 0.162 usec per loop 4 thay vì dự kiến ​​$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100' 1000000 loops, best of 3: 0.364 usec per loop $ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100' 10000000 loops, best of 3: 0.162 usec per loop 5. Đâ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.

number = 13.46

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

print(rounded_number) # Output: 13


Khi thập phân $ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100' 1000000 loops, best of 3: 0.364 usec per loop $ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100' 10000000 loops, best of 3: 0.162 usec per loop 6 được chuyển đổi thành số dấu phẩy động nhị phân, nó lại được thay thế bằng một 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.

round(number, ndigits)

Nếu bạn đang ở trong tình huống cần độ chính xác này, hãy xem xét sử dụng mô-đun $ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100' 1000000 loops, best of 3: 0.364 usec per loop $ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100' 10000000 loops, best of 3: 0.162 usec per loop 7, được thiết kế để số học dấu phẩy động:

Hàm

>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
6 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
    >>> roundup(100)
    100
    >>> roundup(130)
    200
    >>> roundup(1234567891234567891)
    1234567891234567900L
    
    9 không được cung cấp
  • số được làm tròn đến
    >>> roundup(100)
    100
    >>> roundup(130)
    200
    >>> roundup(1234567891234567891)
    1234567891234567900L
    
    9 chữ số nếu
    >>> roundup(100)
    100
    >>> roundup(130)
    200
    >>> roundup(1234567891234567891)
    1234567891234567900L
    
    9 đượ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

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
0

Đầu ra

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
1

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

>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
6 for floats can be surprising. Notice
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
3 gives
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
4 instead of the expected
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
5. 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

>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
6 đối với phao có thể gây ngạc nhiên. Thông báo
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
3 cung cấp
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
4 thay vì dự kiến ​​
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
5. Đâ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.

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
2

Khi thập phân

$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
6 được chuyển đổi thành số dấu phẩy động nhị phân, nó lại được thay thế bằng một 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.

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
3

Đầu ra

>>> def roundup(x):
...     return x if x % 100 == 0 else x + 100 - x % 100
4