style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Redondeo a decenas

Tengo una duda en java como hago para redondear el precio de un producto en base a un parámetro, por ejemplo:

En el precio del producto si el calculo da 2132.34 y se tiene redondeo a 10, el precio a considerar debe ser: 2130 (diferencia 2.34) o 2140 (diferencia 7.66) Por lo cual se mostrara el precio mas cercano 2130

En el precio del producto si el calculo da 2132.34 y se tiene redondeo a 50, el precio a considerar debe ser: 2150(diferencia 17.66) o 2100 (diferencia 32.34) Por lo cual se mostrara el precio mas cercano 2150.

En el precio del producto si el calculo da 2299.66 y se tiene redondeo a 100, el precio a considerar debe ser: 2300(diferencia 0.34) o 2200 (diferencia 99.66) Por lo cual se mostrara el precio mas cercano 2300.

Espero puedan ayudarme

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Como lo harias con papel y lapiz?

Como lo harias con papel y lapiz?

Pues no se me ocurre a mi

Pues no se me ocurre a mi mismo una forma, pero aqui esta la primera que pense.

En Java la division de decimales entre enteros se redondea automaticamente asi que puedes:

a) Dividir el  numero entre la base y luego multiplicarlo por la base, eso te da el redondeo hacia abajo
b) Sumarle la base al redondeo hacia abajo, eso te da el redondeo hacia arriba
c) Calcular la diferencia y tomar el menor.

Ejemplo

a)  2132.34  / 10 da 213  por 10 = 2130
b)  2130 + 10 da 2140 ( up )
c)  si ( n - a < b - n  ) regresa a,  else regresa b

Se me hace que debe de haber otra forma usando el operador modulo (%) pero no logre pensar ninguna.

Voy a intentarlo de la manera

Voy a intentarlo de la manera en que tú me explicaste.
Gracias por tu atención

Imagen de ezamudio

pues así

con módulo es simplemente 2132.34-(2132.34%50)+50 da 2150 - aunque con float/double en Java tal vez te va a dar 2149.9999999999 pero bueno con Math.ceil() se arregla.

Correcto

Me funcionó excelente con tu respuesta ezamudio.

Muchas gracias!!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">