Java - Problema con calculos numericos

 
Vista:

Problema con calculos numericos

Publicado por Oscar Mauricio Gomez Acevedo (47 intervenciones) el 21/09/2005 16:01:34
Saludos, tengo el siguiente problema al manejar una orden de compra.

Tengo dos campos, uno tipo float que es el que me captura el precio, y otro tipo
entero que me maneja la cantidad.

la forma de capturarlos es la siguiente:

float prec_ini=Float.parseFloat(jTxtFld_Prec_Cost.getText());
int canti=Integer.parseInt(jTxtFld_Canti.getText());

el resultado de esta multiplicacion lo guardo en una variable tipo float de la siguiente
manera:

totalprod=prec_ini*canti;

Todo funciona ok, el unico inconveniente es que cuando multiplico valores grandes
el resultado me lo da en un exponencial, cuando realmente no deberia ser asi.
Pienso que el problema esta dado en como formatear ese numero para que el calculo
sea correcto, eso es lo que se me ocurre. Agradezco la atencion, y cualquier ayuda o
comentario lo agradezco.

Estamos en contacto..

Atentamente
Oscar Mauricio Gomez Acevedo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con calculos numericos

Publicado por Gominola (1 intervención) el 21/09/2005 16:33:46
Se me ocurren un par de cosillas:
- La primera: ¿Has probado a truncar los valores decimales?, que no te devuelva más de 2 decimales.
- Intenta buscar un tipo de registro que almacene valores más grades que Float tipo Double o algo asi, no estoy seguro de que double sea más grande que Float.
- Pruba a forzar q todo se trunque de nuevo a Float es decir:
totalprod=parseFloat(prec_ini*canti);

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con calculos numericos

Publicado por Kathy (10 intervenciones) el 22/09/2005 00:21:04
Efectivamente como dice Gominola los doubles son más grandes que los float y además tienen una mayor precision(digitos).
Los doubles pueden tomar valores del orden de 10^301!!!
y tienen una precision de 15 digitos!!

me imagino q con eso será suficiente ;)
salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con calculos numericos

Publicado por Corisio (1 intervención) el 22/09/2005 19:46:49
Creo que lo que buscas es esto (lo he sacado de un manual, no es mérito mío):

Imprimir números en la pantalla puede producir algunos resultados no desados. Por ejemplo:

public class PrintNum {
public static void main(String args[]) {
double amount = 400000.00;
System.out.println("He paid " + amount + " for the house.");
}
}

resulta en:

He paid 400000.0 for the house.

Añadir el símbolo $ en el string no mejorará estos resultados porque los tipos primitivos se imprimen con el número máximo de dígitos distintos de cero para ese tipo, y las comas no están incluidas en el resultado.

Podemos controlar la forma de mostrar y ordenar entradas en el formato de salida necesario usando la clase abstracta NumberFormat del paquete java.text. Esta clase proporciona el interface para formatear y analizar números, e incluye métodos para determinar que localidades tienen formatos numéricos y cuáles son sus nombres. La clase tiene métodos para tres formatos estándards:

* getInstance o getNumberInstance obtiene un formato para el formato de número normal, como 600,000.
* getCurrencyInstance obtiene un formato para el formato de número monetario, como $600,000.00.
* getPercentInstance obtiene un formato para mostrar porcentajes, como 56%

Para formatear un primitivo, empezamos devolviendo un objeto del tipo NumberFormat llamando a uno de los métodos de arriba. Para usar el ejemplo anterior para que muestre $400,000, llamamos a:


NumberFormat nf = NumberFormat.getCurrencyInstance();

Para asegurarnos de que la cantidad está formateada correctamente para un país específico, especificamos la localidad con:

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);

Ahora, el program de arriba se puede reescribir como:

import java.text.*;
import java.util.Locale;

public class PrintNum {
public static void main(String args[]) {
// Amount to be formatted
double amount = 400000.00;
// Returns an object of type NumberFormat
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
// Calls the format method on the NumberFormat object
// to format the amount as desired and prints the
// results to the screen
System.out.println("He paid " + nf.format(amount) + " for the house."); }
}

Resultando en:

He paid $400,000.00 for the house.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con calculos numericos

Publicado por Oscar Mauricio Gomez Acevedo (47 intervenciones) el 23/09/2005 00:47:08
Saludos..

Tu colaboracion ha sido fantastica, me has resuelto muchas dudas, el unico inconveniente es que como tu sabes la maquina virtual de java, trae un valor por defecto para su localizacion. En este caso la locate de la mia es U.S.A por lo que al momento de formatear un double, el separador que utiliza para esto es coma (,). El problema es que al momento de realizar operaciones, segun la configuracion regional del sistema operativo (que en mi caso es Español Colombia) utiliza como separador el punto (.).

La pregunta ahora seria como hago para cambiar la configuracion regional que tiene la virtual machine por defecto.

Agradezco la atencion.

Atentamente
Oscar Mauricio Gomez Acevedo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar