2008-12-07 16 views
6

Tengo un pequeño problema de matemáticas Estoy tratando de resolver¿Redondear el flotador al factor más cercano?

Dado el número xy la resolución y, necesito encontrar la siguiente x 'con la resolución requerida.

p. Ej.

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 

¿Hay alguna forma inteligente de hacerlo en Python?

Respuesta

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) 

produce:

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

Creo que su primera salida de ejemplo es incorrecta, la respuesta correcta para x' es 1.1, ¿verdad?

+0

No funciona para 'x = 0'. – jfs

+0

Funciona para x = 0 del mismo modo que para cualquier x que sea un múltiplo de y: el "siguiente" se interpreta como "el más pequeño no más pequeño que", por lo que x = 0.1, y = 0.1 imprimiría 0.1. Si quiere "el más pequeño estrictamente mayor que", debe hacer "return (math.floor (x/y) +1) * y". – ShreevatsaR

+0

O "return math.floor (x/y + 1) * y", porque floor (t) +1 = floor (t + 1) :-) – ShreevatsaR

Cuestiones relacionadas