Por ejemplo, tengo la variable 3.545555555, que me gustaría truncar a solo 3.54.
                    
                        java
                                double
                                truncate
                                decimalformat
                                
                    
                    
                        Johnny
fuente
                
                fuente

Respuestas:
Si lo desea para fines de visualización, use
java.text.DecimalFormat:Si lo necesita para los cálculos, utilice
java.lang.Math:fuente
floorpara truncar solo funciona para valores positivos.RoundingMode.DOWNcomoRoudingMode.FLOORsiempre vueltas hacia el infinito negativo.Consultar disponible
RoundingModeyDecimalFormat.fuente
DOWNhecho tiene el efecto de truncamiento tanto para números positivos como negativos. Como se ve en la tabla de ejemplos en el doc .Bit Old Forum, ninguna de las respuestas anteriores funcionó para valores positivos y negativos (me refiero al cálculo y solo para truncar sin redondeo). Desde el enlace Cómo redondear un número an decimales en Java
Este método funcionó bien para mí.
Resultados:
fuente
Tenga en cuenta primero que a
doublees una fracción binaria y en realidad no tiene decimales.Si necesita lugares decimales, use a
BigDecimal, que tiene unsetScale()método de truncamiento, o useDecimalFormatpara obtener unString.fuente
Si, por alguna razón, no desea utilizar a
BigDecimal, puede convertir sudoubleaintpara truncarlo.Si desea truncar al lugar de los unos :
intAl lugar de las Décimas :
intdoubleCentésimas de lugar
Ejemplo:
En este ejemplo,
decimalPlacessería el número de lugares DESPUÉS del lugar de las unidades al que desea ir, por lo que 1 redondearía al lugar de las décimas , 2 a las centésimas , y así sucesivamente (0 se redondea al lugar de las unidades y negativo uno a las decenas , etc.)fuente
unroundedNumberes lo suficientemente grande. Puede funcionar para el ejemplo de la pregunta, pero una solución general debería funcionar para cualquieradouble.Formatear como una cadena y convertir de nuevo a doble creo que le dará el resultado que desea.
El valor doble no será round (), floor () o ceil ().
Una solución rápida podría ser:
Puede utilizar el sValue para fines de visualización o el newValue para el cálculo.
fuente
Math.floor(value * 100) / 100¿ Quizás ? Tenga en cuenta que los valores como3.54pueden no estar representados exactamente con undouble.fuente
Puede utilizar el objeto de clase NumberFormat para realizar la tarea.
fuente
3.545555555 para obtener 3.54. Intente seguir para esto:
¡Esto dará = 3,54!
fuente
Este es el método que utilizo:
Esto también se puede hacer:
fuente
Quizás siguiendo:
fuente
Una comprobación rápida es utilizar el método Math.floor. Creé un método para verificar un doble para dos o menos lugares decimales a continuación:
fuente
Tengo una versión ligeramente modificada de Mani .
Salida:
fuente
Esto funcionó para mí:
Personalmente, me gusta esta versión porque en realidad realiza el redondeo numérico, en lugar de convertirla en una cadena (o similar) y luego formatearla.
fuente
Bueno, esto puede ser un poco incómodo, pero creo que puede resolver tu problema :)
fuente