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

sumar dinero

Estas en el tema de sumar dinero en el foro de Java en Foros del Web. Buenas, tengo una preguntita pequeña, yo se que en java pra sumar tenemos las variables int,float,double y q se suma asi: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript ...
  #1 (permalink)  
Antiguo 11/10/2011, 22:25
Avatar de jrevilla  
Fecha de Ingreso: septiembre-2011
Ubicación: Lima, Peru, Peru
Mensajes: 51
Antigüedad: 13 años, 1 mes
Puntos: 2
Pregunta sumar dinero

Buenas, tengo una preguntita pequeña, yo se que en java pra sumar tenemos las variables int,float,double y q se suma asi:

Código Javascript:
Ver original
  1. int numero1 = 5;
  2. int numero2 = 10;
  3.  
  4. int numero3=numero1+numero2;

pero he odio que para sumar o restar dinero eso no es recomendable... yo quisiera saber que variable me recomiendan para poder sumar valores de dinero exactamente escuche algo de BigDecimal, pero me preguntaba si ese es el unico? Gracias
  #2 (permalink)  
Antiguo 12/10/2011, 02:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: sumar dinero

A mi poca experiencia puedo decirte que con double basta, ya que te permite decimales; no creo que tengas problemas con eso.
  #3 (permalink)  
Antiguo 12/10/2011, 06:18
c0c
 
Fecha de Ingreso: octubre-2004
Mensajes: 38
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: sumar dinero

Yo tengo un problema con Double al operar, ¿como puedo hacer que detecte si se ha escrito un punto (.) y si es asi, sustituirlo por una coma (,)?

Me imagino que habra una forma para definirlo una vez al principio, o tengo que hacerlo cada vez que el usuario ingresa informacion?
  #4 (permalink)  
Antiguo 12/10/2011, 08:09
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: sumar dinero

Hola:

El problema del dinero es que los cálculos deben ser siempre exactos, no debería irse ni un céntimo.

El problema de los int o long, aparte de no admitir decimales, es que tienen unos valores limitados. Los int pueden quedarse cortos si manejas cantidades de dinero grandes. Los long en principio valdrían (decimales aparte) si no manejas cantidades de dinero superiores a 4294967295 (la mitad si quieres usar cantidades negativos)

El problema de los float y double es que no son precisos. Una operación tonta que debe dar resultado 1.0, puede darte 0.9999999999. Aparte, aunque los float y doubles admiten cantidades muy grandes, sólo tienen un número de cifras significativas limitado. Por ejemplo, un float tiene 6 cifras signficativas, eso quiere decir que un float sólo te garantiza las primeras seis cifras. En 1.23456789e3, sólo son "buenas" 1.23456e3, el resto puede no ser bueno. Con double tienes 15 cifras significativas, que también puede quedarse escaso para cantidades grandes de dinero.

Por ello, los tipos básicos de java (o en casi todos los demás lenguajes de programación) no sirven para dinero si se quieren manejar cantidades grandes y decimales con exactitud. En el caso de java, puedes usar el BigDecimal, que da toda la precisión que quieras y el número de decimales que definas en un principio.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 12/10/2011, 09:14
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: sumar dinero

Cita:
Iniciado por c0c Ver Mensaje
Yo tengo un problema con Double al operar, ¿como puedo hacer que detecte si se ha escrito un punto (.) y si es asi, sustituirlo por una coma (,)?

Me imagino que habra una forma para definirlo una vez al principio, o tengo que hacerlo cada vez que el usuario ingresa informacion?
Lo mejor seria setear el Locale.
http://www.forosdelweb.com/f45/forma...5/#post3807598
  #6 (permalink)  
Antiguo 12/10/2011, 10:36
Avatar de jrevilla  
Fecha de Ingreso: septiembre-2011
Ubicación: Lima, Peru, Peru
Mensajes: 51
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: sumar dinero

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

El problema del dinero es que los cálculos deben ser siempre exactos, no debería irse ni un céntimo.

El problema de los int o long, aparte de no admitir decimales, es que tienen unos valores limitados. Los int pueden quedarse cortos si manejas cantidades de dinero grandes. Los long en principio valdrían (decimales aparte) si no manejas cantidades de dinero superiores a 4294967295 (la mitad si quieres usar cantidades negativos)

El problema de los float y double es que no son precisos. Una operación tonta que debe dar resultado 1.0, puede darte 0.9999999999. Aparte, aunque los float y doubles admiten cantidades muy grandes, sólo tienen un número de cifras significativas limitado. Por ejemplo, un float tiene 6 cifras signficativas, eso quiere decir que un float sólo te garantiza las primeras seis cifras. En 1.23456789e3, sólo son "buenas" 1.23456e3, el resto puede no ser bueno. Con double tienes 15 cifras significativas, que también puede quedarse escaso para cantidades grandes de dinero.

Por ello, los tipos básicos de java (o en casi todos los demás lenguajes de programación) no sirven para dinero si se quieren manejar cantidades grandes y decimales con exactitud. En el caso de java, puedes usar el BigDecimal, que da toda la precisión que quieras y el número de decimales que definas en un principio.

Se bueno.
gracias eh =) ... usare BigDecimal entonces
  #7 (permalink)  
Antiguo 12/10/2011, 16:33
c0c
 
Fecha de Ingreso: octubre-2004
Mensajes: 38
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: sumar dinero

Cita:
Iniciado por Ronruby Ver Mensaje
Lo mejor seria setear el Locale.
[url]http://www.forosdelweb.com/f45/formato-jformattedtextfield-usando-decimalformat-901645/#post3807598[/url]
Desde luego es una opcion, pero no la contemplo porque no soy solo yo quien va a usar el programa, y desde luego el hecho de que la aplicacion se cierre inesperadamente, devolviendo un error, solo por haber introducido un punto en lugar de una coma es, con perdon, una putada.

Por eso queria reemplazar los puntos por comas.

La teoria mas o menos la tengo clara, deberia coger el valor introducido por el usuario, transformarla en un String, analizarla y reemplazar, devolver el String a double (que es el variable que estoy usando) y por ultimo mostrarlo por pantalla.

Pero no tengo ni idea de como hacerlo en codigo, pues he probado y siempre me da error? alguna sugerencia?

PD: Recogo el valor del teclado con double xxx = read.nextDouble();

Muchas gracias!
  #8 (permalink)  
Antiguo 12/10/2011, 18:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: sumar dinero

Para lo de los puntos puedes utilizar expresiones regulares:

Código Javascript:
Ver original
  1. Pattern p = Pattern.compile(".");
  2. //Pattern p = Pattern.compile("\."); <- no recuerdo si es asi como el anterior
  3. Matcher m = p.matcher(contenido);
  4. if(m.find() == true){
  5.     System.out.println("Si contiene punto");
  6. }
  7. else{
  8.     System.out.println("No contiene punto");
  9. }

Mas o menos así es, no esta demas que leas al respecto; y como ya te explicaron, elegir con que haras tus operaciones tiene varias incognitas como que tan grandes seran, etc.

Suerte con eso.
  #9 (permalink)  
Antiguo 12/10/2011, 22:03
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: sumar dinero

No leas con nextDouble(), leelo como String. Si lees como double y el usuario ha metido punto, ya tienes el problema.

Una vez leído como String, usa la función replace() de String para convertir los puntos en comas y luego usa Double.parseDouble() para convertir el String en double. Ten cuidado, creo que parseDouble() usa puntos, por lo que igual debes convertir las comas en puntos, al revés de como lo estás haciendo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #10 (permalink)  
Antiguo 14/10/2011, 22:07
c0c
 
Fecha de Ingreso: octubre-2004
Mensajes: 38
Antigüedad: 20 años, 1 mes
Puntos: 0
De acuerdo Respuesta: sumar dinero

Muchas gracias a los que me habeis respondido, todas las aportaciones me resultan interesantes, aunque al final, como simplicidad de uso creo que utilizare el metodo que me propone chuidiang, pues lo considero el mas efectivo para mi proposito.

Lo contemple al principio, pero al no saber las limitaciones de las variables double para sustituir caracteres me parecio mas sencillo hacerlo como lo hice.

Ahora veo que fue un error.

Lo dicho, muchas gracias :)

Etiquetas: netbeans
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 13:43.