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
floor
para truncar solo funciona para valores positivos.RoundingMode.DOWN
comoRoudingMode.FLOOR
siempre vueltas hacia el infinito negativo.Consultar disponible
RoundingMode
yDecimalFormat
.fuente
DOWN
hecho 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
double
es 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 useDecimalFormat
para obtener unString
.fuente
Si, por alguna razón, no desea utilizar a
BigDecimal
, puede convertir sudouble
aint
para truncarlo.Si desea truncar al lugar de los unos :
int
Al lugar de las Décimas :
int
double
Centésimas de lugar
Ejemplo:
En este ejemplo,
decimalPlaces
serí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
unroundedNumber
es 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.54
pueden 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