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].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.
>>> roundup[100]
100
>>> roundup[130]
200
>>> roundup[1234567891234567891]
1234567891234567900L
$ 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
$ 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
$ 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
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à:
$ 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
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:
$ 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
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
9 không được cung cấp>>> roundup[100] 100 >>> roundup[130] 200 >>> roundup[1234567891234567891] 1234567891234567900L
- số được làm tròn đến
9 chữ số nếu>>> roundup[100] 100 >>> roundup[130] 200 >>> roundup[1234567891234567891] 1234567891234567900L
9 được cung cấp>>> roundup[100] 100 >>> roundup[130] 200 >>> roundup[1234567891234567891] 1234567891234567900L
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
1Ví 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
2Khi 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