2008-12-07 38 views
6

Tôi có vấn đề về toán học nhỏ Tôi đang cố gắng giải quyếtLàm tròn phao cho yếu tố gần nhất?

Cho số x và độ phân giải y, tôi cần tìm x tiếp theo với độ phân giải yêu cầu.

ví dụ:

x = 1.002  y = 0.1 x'= 1.1 

x = 0.348  y = 0.1 x'= 0.4 

x = 0.50  y = 1  x'= 1 

x = 0.32  y = 0.05  x'= 0.35 

Có cách nào thông minh để thực hiện việc này bằng Python không?

Trả lời

11
import math 

def next_multiple(x, y): 
    return math.ceil(x/y)*y 

def try_it(x, y): 
    print x, y, next_multiple(x, y) 

for x, y in [ 
    (1.002, 0.1), 
    (0.348, 0.1), 
    (0.50, 1), 
    (0.32, 0.05) 
    ]: 
    try_it(x, y) 

sản xuất:

1.002 0.1 1.1 
0.348 0.1 0.4 
0.5 1 1.0 
0.32 0.05 0.35 

Tôi nghĩ rằng ví dụ đầu ra đầu tiên của bạn là sai, Câu trả lời chính xác cho x' là 1.1, phải không?

+0

Nó không hoạt động cho 'x = 0'. – jfs

+0

Nó hoạt động cho x = 0 giống như nó hoạt động cho bất kỳ x là bội số của y: "tiếp theo" được hiểu là "nhỏ nhất không nhỏ hơn", vì vậy x = 0,1, y = 0,1 sẽ in 0,1. Nếu bạn muốn "nhỏ nhất nghiêm ngặt hơn", bạn nên làm "return (math.floor (x/y) +1) * y". – ShreevatsaR

+0

Hoặc "trả về math.floor (x/y + 1) * y", bởi vì tầng (t) +1 = tầng (t + 1) :-) – ShreevatsaR

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