Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] separar de un Bigdecimal la parte entera y la decimal

Estas en el tema de separar de un Bigdecimal la parte entera y la decimal en el foro de Java en Foros del Web. Buenas. Tengo un valor en un BigDecimal y necesito separar su parte entera y decimal. Había pensado recuperar el dato, pasarlo a String y hacer ...
  #1 (permalink)  
Antiguo 16/02/2016, 10:25
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
separar de un Bigdecimal la parte entera y la decimal

Buenas.

Tengo un valor en un BigDecimal y necesito separar su parte entera y decimal.
Había pensado recuperar el dato, pasarlo a String y hacer un split por el punto, pero me devuelve un array vacio.

Muchas gracias. Y perdonen las molestias.
  #2 (permalink)  
Antiguo 17/02/2016, 07:49
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Buenas,

Que contiene exactamemente el String al que intentas hacer el split?

Código Java:
Ver original
  1. System.out.println(tubigdecimal.toString());

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 17/02/2016, 08:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: separar de un Bigdecimal la parte entera y la decimal

BigDecimal big = new BigDecimal("925.0000");
System.out.println("result: "tubigdecimal.toString());

result: 925.0000
  #4 (permalink)  
Antiguo 17/02/2016, 09:05
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Al final lo he hecho así, supongo que hay mejores maneras.

int longitudParteDecimal = big.scale();
int precision = big.precision();
int longitudParteEntera = precision - longitudParteDecimal;
StringBuilder resultParteEntera = new StringBuilder("0");
StringBuilder resultParteDecimal = new StringBuilder("");
if (longitudParteEntera >= 0) {
String parteEnteraString = big.toBigInteger()
.toString();
String parteDecimalString = "";
if (longitudParteDecimal != 0) {
parteDecimalString = big.toString().substring(
longitudParteEntera + 1, precision + 1);
}
resultParteEntera = new StringBuilder(parteEnteraString);
resultParteDecimal = new StringBuilder(parteDecimalString);
}
resultParteEntera = new StringBuilder(this.obtenerTitulosFormateados(
longitudEnteros, new BigDecimal(resultParteEntera.toString())));
while (resultParteDecimal.length() < longitudDecimales) {
resultParteDecimal.append("0");
}
if (resultParteDecimal.length() > longitudDecimales) {
resultParteDecimal = new StringBuilder(
resultParteDecimal.substring(0, longitudDecimales));
}
result.append(resultParteEntera).append(resultPart eDecimal);
  #5 (permalink)  
Antiguo 17/02/2016, 12:19
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Buenas,

Y no te funciona el split???

A mi me funciona sin problemas. Copia este codigo y pruebalo:

Código Java:
Ver original
  1. public static void main(String[] args) {
  2.         BigDecimal big = new BigDecimal("925.0000");
  3.         System.out.println("result: " + big.toString());
  4.         String[] parts = big.toString().split("\\.");
  5.         System.out.println("Parte entera: " + parts[0]);
  6.         System.out.println("Parte decimal: " + parts[1]);
  7.     }


Salida:
result: 925.0000
Parte entera: 925
Parte decimal: 0000


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 18/02/2016, 02:13
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Gracias.

Lo hice con un Mac y me funcionaba el split y lo pase a windows y no funcionaba. Debe ser algo de System o algo parecido, aun hay algún caso que me llega en coma flotante y split no me serviría, lo voy a dejar como lo tengo.
  #7 (permalink)  
Antiguo 18/02/2016, 11:05
 
Fecha de Ingreso: mayo-2015
Ubicación: Wilde
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Ojo dependiendo de la configuración local puede devolverte 10.5 o 10,5 , a veces inclusive sale con separador de miles. antes del split() hace que el string salga por consola asi verificas que te esta devolviendo.

Por otro lado esto me funciona siempre:

public static void bigDecimalTest(){
BigDecimal big = new BigDecimal("925.9900");
System.out.println(big.intValue());
}

//devuelve 925

Última edición por Jeabdm; 18/02/2016 a las 11:26
  #8 (permalink)  
Antiguo 18/02/2016, 12:12
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: separar de un Bigdecimal la parte entera y la decimal

Cita:
antes del split() hace que el string salga por consola asi verificas que te esta devolviendo.
Eso es precisamente lo que le pedi en la primera respuesta y me confirmo que siempre recibe el punto como separador.

Tu ejemplo devuelve la parte entera pero no la decimal. Erickvk quiere obtener ambas partes.


Yo creo que lo que ha pasado es que ha hecho un simple split(".") en lugar de un split("\\.").


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: decimal, parte, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:11.