Estoy reescribiendo el código JavaScript a Java. Encontré esta línea en código JavaScript.
Number("<amount-values>").toFixed(0)Como el valor está relacionado con el dinero, estoy usando BigDecimal en Java para hacer cálculos precisos y no perder precisiones.
¿Podría ayudarme con el modo de redondeo correcto en BigDecimal que es equivalente al modo de redondeo del método Number() en JavaScript, donde ambos redondeos producirán el mismo resultado?
BigDecimal.setScale(0)Ambas escalas están produciendo resultados diferentes cuando hay decimales. Creé una tabla muy pequeña y veo que el método Number() se está alineando con HALF_DOWN, HALF_EVEN, HALF_UP. Pero este es un ejemplo muy pequeño y podría haber muchos otros casos.
Sí, no quiero nada después del punto decimal en mi salida.
Para que quede claro, Number.prototype.toFixed() no es equivalente a Math.Round
(5.5).toFixed(0) == 6 (5.4).toFixed(0) == 5 (-5.5).toFixed(0) === **-6** Math.round(5.5) == 6 Math.round(5.4) == 5 Math.round(-5.5) == **-5**Debe saber esto y decidir qué comportamiento desea, si hay valores negativos involucrados.
Si todos sus valores son positivos, la lógica es bastante simple: si el decimal es mayor o igual a .5, entonces redondea hacia arriba (Math.ceil), de lo contrario, redondea hacia abajo (Math.floor). Creo que "Math.ceil" y "Math.floor" son los nombres de los métodos tanto en JS como en Java.
Dado que tiene decimales en su ejemplo, debe tener claro si realmente desea el comportamiento mostrado por (-5.5).toFixed(0) vs Math.round(-5.5).
Parece que toFixed efectivamente lleva las cosas a ambos lados de 0 hacia 0. Math.round, por otro lado, parece redondear los valores hacia abajo, a valores más bajos (ya sea menos positivos o más negativos).