2012-03-21 31 views
10

estoy en busca de encontrar una manera de redondear al más cercano 500.I've estado utilizando:Ronda a la 500 más cercano, Python

math.ceil(round(8334.00256 + 250, -3)) 

Por el cual tengo un valor de una escala en un mapa Estoy haciendo en ArcGIS. Tengo la capacidad de leer y escribir el factor de escala (es decir, 1: 8334 ... básicamente, estableces el milésimo y el valor predeterminado es una relación) Si el factor de escala no es un factor de 500, quiero redondearlo a los próximos 500. El math.ceil redondeará cualquier valor decimal, y la ronda (n, -3) redondeará a la milésima más cercana, pero estoy luchando por encontrar una forma de redondear al 500 más cercano.

¿Alguna sugerencia? Gracias, Mike

+1

'x + (500 - x)% 500' –

Respuesta

26

, redondo, unscale:

round(x/500.0) * 500.0 

Editar: Para redondear al siguiente múltiplo de 500, se utiliza la misma lógica con math.ceil() en lugar de round():

math.ceil(x/500.0) * 500.0 
+0

El problema es que necesito redondear hacia arriba al 500 más cercano, no solo redondear en cualquier dirección. Si enchufo x = 8001, su lógica se redondea a 8000. Necesito 8500 .... – Mike

+1

Sven, comencé a trabajar con round (x/500.0 + 0.5) * 500 que me da el resultado que estaba buscando. Estoy usando el módulo matemático de todos modos, así que voy a usar tu sintaxis. Gracias por la ayuda. – Mike

+3

'x + (500 - x)% 500' –

3

Tal vez algo como esto:

round(float(x)/500) * 500 

La conversión "flotar" no es necesario si está utilizando Python 3 o posterior, o si ejecuta la instrucción from __future__ import division para la división entera cuerdo. Escala

+0

Vea el comentario debajo de la sugerencia de Sven. Gracias. – Mike

+0

La idea de Sven parece mejor. Solo tecleé la primera cosa razonable que pensé. –

6

personalmente encontrar redondeo, pero desordenado. Prefiero usar:

(x+250)//500*500 

// significa división entera.

EDITAR: Oh, me perdí que redondeas "arriba". Entonces quizás

-(-x//500)*500 
Cuestiones relacionadas