2011-11-14 23 views
14

Tôi đang chạy vào các vấn đề sau:Python - làm tròn bởi tứ khoảng

Với số khác nhau như:

10,38

11,12

5,24

9,76

hiện đã tồn tại chức năng 'tích hợp sẵn' để làm tròn m đến 0,25 bước gần như ví dụ .:

10.38 -> 10,50

11,12 -> 11,00

5,24 -> 5,25

9,76 -> 9-75?

Hoặc tôi có thể tiếp tục và hack cùng một chức năng thực hiện tác vụ mong muốn không?

Cảm ơn trước và

với Trân

Dan

Trả lời

24
>>> def my_round(x): 
... return round(x*4)/4 
... 
>>> 
>>> assert my_round(10.38) == 10.50 
>>> assert my_round(11.12) == 11.00 
>>> assert my_round(5.24) == 5.25 
>>> assert my_round(9.76) == 9.75 
>>> 
+0

* đầu ---> bàn * thực sự tầm thường - Tôi sẽ dừng mã hóa lúc 5 giờ sáng - cảm ơn pulegium và 6502 – Daniyal

4

Không có được xây dựng trong, nhưng một chức năng như vậy là tầm thường để viết

def roundQuarter(x): 
    return round(x * 4)/4.0 
26

Đây là một giải pháp mục đích chung cho phép làm tròn đến độ phân giải tùy ý. Đối với trường hợp cụ thể của bạn, bạn chỉ cần cung cấp 0.25 làm độ phân giải nhưng các giá trị khác có thể, như được hiển thị trong các trường hợp thử nghiệm.

def roundPartial (value, resolution): 
    return round (value/resolution) * resolution 

print "Rounding to quarters" 
print roundPartial (10.38, 0.25) 
print roundPartial (11.12, 0.25) 
print roundPartial (5.24, 0.25) 
print roundPartial (9.76, 0.25) 

print "Rounding to tenths" 
print roundPartial (9.74, 0.1) 
print roundPartial (9.75, 0.1) 
print roundPartial (9.76, 0.1) 

print "Rounding to hundreds" 
print roundPartial (987654321, 100) 

đầu ra này:

Rounding to quarters 
10.5 
11.0 
5.25 
9.75 
Rounding to tenths 
9.7 
9.8 
9.8 
Rounding to hundreds 
987654300.0 
+0

một giải pháp chung tuyệt vời. Làm cách nào tôi có thể đánh dấu tất cả các giải pháp đã cho là 'câu trả lời được chấp nhận'? – Daniyal

+3

@Daniyal: bạn không thể. Hành vi thông thường của tôi, nếu các câu trả lời _can't_ được sắp xếp trên công đức, là để cho nó (cùng với một upvote) cho anh chàng có đại diện thấp nhất và cũng upvote những người khác. Trong trường hợp này, đó không phải là tôi không may :-) – paxdiablo

2

Các giải pháp của paxdiablo có thể là một chút cải thiện.

def roundPartial (value, resolution): 
return round (value /float(resolution)) * resolution 

vì vậy chức năng bây giờ là: "kiểu dữ liệu nhạy cảm".

Các vấn đề liên quan