Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 27/12/10, 17:36:59
Avatar de pronick
pronick pronick no está en línea
Miembro del foro
Mensajes: 65
 
Fecha de registro: nov 2009
Mensajes: 65
Mencionado: 0 comentarios
Tagged: 0 hilos
Necesito ayuda, mostrar solo 2 decimales

Buenas, Tengo una aplicación, mi primera como la de muchos
, una corversora de moneda. En mi caso el problema es que necesito que para el resultado solo me dé dos decimales.

Mirando por los foros encontre la clase decimalFormat, pero no se como usarla ni donde meterla, teniendo encuenta que empiezo en android desde cero en programación, es bastante comprensible, digo yo.

Podríais echarme una mano

en el .java tengo esto



package desarrolladores.android.com.eurocalculadora;

import java.text.DecimalFormat;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class Eurocalculadora extends Activity {

private EditText campoCantidad;
private EditText campoEuro;
private EditText campoDolar;
private EditText campoLibra;
private EditText campoPeseta;


public class DecimalFormat {

public DecimalFormat(String string) {
}
DecimalFormat dosdec = new DecimalFormat("#########.00");
}



public void f_euros()
{
try{
campoDolar.setText(""+Double.parseDouble(campoCant idad.getText().toString())*1.3117);
campoLibra.setText(""+Double.parseDouble(campoCant idad.getText().toString())/0.85030);
campoPeseta.setText(""+Double.parseDouble(campoCan tidad.getText().toString())*166.386);
campoEuro.setText(getResources().getString(R.strin g.Elegida));
}catch(Exception e){
campoEuro.setText(getResources().getString(R.strin g.Error));
}
}




He probado a ponerlo en todos lados, pero no se que hacer, supongo que será sencillo pero para mi es un mundo, sin hay que crear un string por favor decidmelo.

Una aclaracion, mi app lo que tiene es un edittext de entrada, 4 botones para indicar la moneda de origen, y con una pulsacion de ellos, 4 resultados en otros 4 edittext, 3 son numericos y uno de texto. A parte una opcion de error por si los datos no son correctos.

Lo que quiero que en cada uno de los 3 resultados numericos me aparezcan solo 2 decimales.



P.D. Como puedo hacer para impedir que se pueda escribir en los edittext de salida.
Responder Con Cita


  #2  
Viejo 27/12/10, 21:09:25
Avatar de asturdeibiz
asturdeibiz asturdeibiz no está en línea
Usuario poco activo
Mensajes: 49
 
Fecha de registro: ago 2010
Localización: Asturias
Mensajes: 49
Modelo de smartphone: Nexus One
Versión de ROM: Gingerbread 2.3.3
Versión de Radio: 5.08.00.04
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola, con la clase DecimalFormat lo puedes conseguir, la manera de utilizarla sería la siguiente:

Código:
//dPi Variable que quieres mostrar
double dPi=3,141592;
//Creación y llamada al constructor, le pasas el formato que quieres utilizar
DecimalFormat df = new DecimalFormat("0.00"); 
//Invocas al método format pasándole la variable dPI y devuelve un String con el valor en el formato indicado
String sPi=df.format(dPi);
No he probado este código en Android pero debería funcionar.
Responder Con Cita
  #3  
Viejo 28/12/10, 00:17:54
Avatar de pronick
pronick pronick no está en línea
Miembro del foro
Mensajes: 65
 
Fecha de registro: nov 2009
Mensajes: 65
Mencionado: 0 comentarios
Tagged: 0 hilos
Muchas gracias. me ha venido de lujo
Responder Con Cita
  #4  
Viejo 30/12/10, 16:25:31
Avatar de pronick
pronick pronick no está en línea
Miembro del foro
Mensajes: 65
 
Fecha de registro: nov 2009
Mensajes: 65
Mencionado: 0 comentarios
Tagged: 0 hilos
Astur, no consigo que funcione...
Si me haces el favor de echarle un ojillo al código, puedes decirme como lo meto. GRACIAS
package desarrolladores.android.com.eurocalculadora;

import java.text.DecimalFormat;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class Eurocalculadora extends Activity {

private EditText campoCantidad;
private EditText campoEuro;
private EditText campoDolar;
private EditText campoLibra;
private EditText campoPeseta;


public class DecimalFormat {

public DecimalFormat(String string) {
}
DecimalFormat dosdec = new DecimalFormat("#########.00");
}



public void f_euros()
{
try{
campoDolar.setText(""+Double.parseDouble(campoCant idad.getText().toString())*1.3117);
campoLibra.setText(""+Double.parseDouble(campoCant idad.getText().toString())/0.85030);
campoPeseta.setText(""+Double.parseDouble(campoCan tidad.getText().toString())*166.386);
campoEuro.setText(getResources().getString(R.strin g.Elegida));
}catch(Exception e){
campoEuro.setText(getResources().getString(R.strin g.Error));
}
}
.
.
.
euros.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
f_euros();
}
});
Responder Con Cita
  #5  
Viejo 30/12/10, 20:47:38
Avatar de asturdeibiz
asturdeibiz asturdeibiz no está en línea
Usuario poco activo
Mensajes: 49
 
Fecha de registro: ago 2010
Localización: Asturias
Mensajes: 49
Modelo de smartphone: Nexus One
Versión de ROM: Gingerbread 2.3.3
Versión de Radio: 5.08.00.04
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola, entiendo que quieres mostrar sólo dos decimales en los campos:
campoDolar
campoLibra
campoPeseta


Que el usuario mete en campoCantidad (en euros) una cantidad y da a un botón, entonces la aplicación lanza la función f_euros() que edita los EditText anteriores para que muestre una conversión con dos decimales. Ten en cuenta que se la clase DecimaFormat usa el redondeo, creo que es lo que buscas pero por si acaso te lo comento.

Si he entendido bien borra la clase DecimalFormat y modifica la función f_euros() como te indico a continuación. Te comento además que intentes optimizar la memoria y el tiempo de procesador lo máximo posible, si te fijas llamas 3 veces a

Double.parseDouble(campoCant idad.getText().toString())

lo que provoca que se ejecute el idéntico código innecesariamente 2 veces incrementando el tiempo en realizar la función.

Además cuando pasas a libras divides cuando tienes que multiplicar, supongo que sea un fallo al teclear que no te diste cuenta.


public void f_euros() {
//Aqui es donde le dices el formato que quieres
DecimalFormat df = new DecimalFormat("0.00");
//Llamas una sola vez y parseas lo introducido en el campoCantidad
Double cantidad=Double.parseDouble(campoCantidad.getText( ).toString());

//Invocas al método format pasándole la cantidad multiplicada por la equivalencia
try {
//Despues de convertir a double, formateas con el DecimalFormat creado anteriormente
campoDolar.setText(df.format(cantidad* 1.3117));
campoLibra.setText(df.format(cantidad * 0.85030));
campoPeseta.setText(df.format(cantidad * 166.386));
campoEuro.setText(getResources().getString(R.strin g.Elegida));
} catch (Exception e) {
campoEuro.setText(getResources().getString(R.strin g.Error));
}
}

Por otra parte, los campos
campoDolar
campoLibra
campoPeseta
campoEuro

están definidos pero no veo que en ningún sitio apunten a los que tienes en el layout, supongo que en onCreate() de la actividad tienes algo así como:

campoDolar=(EditText) findViewById(R.id.campoDolar);

para cada campo (libra,peseta, euro y cantidad).


Cuida de depurar la entrada de datos y no permitir al usuario meter letras en los campos donde solo deberían ir números o que se encuentren vacíos y que estas comprobaciones se hagan antes de llamar a la función f_euros();

Un saludo.

Última edición por asturdeibiz Día 31/12/10 a las 01:46:51
Responder Con Cita
  #6  
Viejo 03/01/11, 00:02:39
Avatar de pronick
pronick pronick no está en línea
Miembro del foro
Mensajes: 65
 
Fecha de registro: nov 2009
Mensajes: 65
Mencionado: 0 comentarios
Tagged: 0 hilos
Astur, se que puede sonarte un poco mal, pero te adoro. Empezar a programar en Android sin saber absolutamente nada de programar, es una de las cosas más dificiles que me había propuesto en mi vida, y gracias a personas como tu, tengo animos para seguir. Porque supongo que mucha gente me entenderá, cuando por algún motivo no entiendo algo, y pruebo de una manera, pruebo de otra, y de otra hasta que ya no se que hacer y pregunto, y me siento totalmente frustrado y sin animos de seguir. Pero como te decia, me has alegrado la vida.

Además has acertado en todo lo que me preguntas en el post, efectivamente los campos son :
campoCantidad = (EditText) findViewById(R.id.cantidad);
campoLibra = (EditText) findViewById(R.id.salelibra);
campoDolar = (EditText) findViewById(R.id.saledolar);
campoEuro = (EditText) findViewById(R.id.saleeuro);
campoPeseta = (EditText) findViewById(R.id.salepeseta);

Y en lo que respecta al resto de cosas diste de lleno en el blanco. Ni yo me habría explicado mejor.

El campo cantidad lo tengo definido así:

<EditText
android:id="@+id/cantidad"
android:layout_width="fill_parent"
android:layout_height="38px"
android:numeric="decimal"
>
</EditText>

Supongo que lo de "decimal" es la lo que te refieres, el catch lo tengo por si le dan al boton, sin meter ninguna cantidad.

Solamente quería preguntarte un par de cositas;
-Es posible impedir que se pueda escribir en los editText (campos) que estoy utilizando para la salida de los resultados???
-Que lectura me recomendarías para principiantes muy muy novatos y sin mucha idea de programar como yo??


MUCHISIMAS GRACIAS.
De verdad, te debo una caña, si pasas por Córdoba me localizas por privado y te invito. Si no contestas, lo entederé, bastante has hecho ya.
Responder Con Cita
  #7  
Viejo 03/01/11, 01:14:46
Avatar de asturdeibiz
asturdeibiz asturdeibiz no está en línea
Usuario poco activo
Mensajes: 49
 
Fecha de registro: ago 2010
Localización: Asturias
Mensajes: 49
Modelo de smartphone: Nexus One
Versión de ROM: Gingerbread 2.3.3
Versión de Radio: 5.08.00.04
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Jaja, de nada hombre, yo sé también lo que es buscar por foros y sitios cuando estas atascado en un problema, así que para pagarme solo tienes que devolverle el favor a alguien que lo necesite (a lo cadena de favores) :P y me sentiré pagado.

Para impedir que escriban en los EditText se puede hacer de varias maneras, EditText tiene una propiedad llamada inputType y puedes darle valor "none" de tal manera que no se pueda escribir nada nunca (salvo los valores que tu le asignes en el código) o "number" si solo quieres que se escriban números, consulta los posibles valores aquí: http://developer.android.com/referen....html#EditText
y también puedes verlo más claramente aquí y los tipos que hay:
http://www.androidpeople.com/android...ext-inputtype

Esa es la forma que hay que seguir para hacerlo en Android.

En cuanto a lectura, para programar en Java (que al fin y al cabo es en lo que estamos) "Thinking in Java" (Pensando en Java) es la que más recomiendo y es la que se suele recomendar en el primer curso de informática, también "Introducción a la programación con Java. Un enfoque orientado a objetos". de Prentice Hall, 2000 es bastante recomendada aunque no la he leído.

Se puede aprender de forma autodidacta todo lo necesario y con empeño mucho más que en cualquier curso/carrera/X pero a veces que un profesor te enseñe a programar ayuda y acelera el aprendizaje bastante, si te decantas por apuntarte a algún curso el lenguaje Java es perfecto para empezar.

Un saludo!
Responder Con Cita
  #8  
Viejo 04/01/11, 02:03:53
Avatar de pronick
pronick pronick no está en línea
Miembro del foro
Mensajes: 65
 
Fecha de registro: nov 2009
Mensajes: 65
Mencionado: 0 comentarios
Tagged: 0 hilos
Muchas gracias nuevamente Astur, tu respuesta sobre el android:inputType = "none", no me funcionó, pero si que me ayudo. Según encontré en un foro inglés, hay algún problema con 2.2, no sé si es cierto, pero con eso podía seguir metiendo texto en las edittext de salida y eso era lo que quería evitar. Pues bien, en ese mismo post, más abajo econtré

android:editable
="false"

que corta el problema de raiz, lo probé y va de lujo.

Un saludo, y gracias nuevamente, mañana empezaré con mi segunda app, y voy a necesitar algo de código para llamar al estado de la batería, así que no creo que tardes mucho en volver a ver algún post mio por aquí.

P.D. por cierto, he colgado mi app, en un blog http://androsur.blogspot.com por si le quieres echar un ojo para ver como ha quedao.
Responder Con Cita
  #9  
Viejo 04/01/11, 10:09:45
Avatar de asturdeibiz
asturdeibiz asturdeibiz no está en línea
Usuario poco activo
Mensajes: 49
 
Fecha de registro: ago 2010
Localización: Asturias
Mensajes: 49
Modelo de smartphone: Nexus One
Versión de ROM: Gingerbread 2.3.3
Versión de Radio: 5.08.00.04
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
La verdad que nunca había probado esta propiedad, yo también soy primerizo en Android pero me apunto tu solución para el futuro.
Parece que ha quedado más que bien, la probaré.
Un saludo!
Responder Con Cita
  #10  
Viejo 08/09/11, 21:14:50
Avatar de JulioFalcon
JulioFalcon JulioFalcon no está en línea
Usuario novato en la web
Mensajes: 8
 
Fecha de registro: may 2010
Mensajes: 8
Modelo de smartphone: estoy en ello, ANDROID POR SUPUESTO!
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola,

Podrias publicar el codigo para ver como quedó finalmente la aplicación, por favor?

Estoy empezando y me ha parecido que toca temas interesantes.

Gracias
Responder Con Cita
  #11  
Viejo 30/10/12, 23:47:07
Avatar de tamudasus23
tamudasus23 tamudasus23 no está en línea
Usuario novato en la web
Mensajes: 1
 
Fecha de registro: dic 2010
Mensajes: 1
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Agradecimiento.

asturdeibiz Gracias. Me ha servido tu explicacion. No se si es lo mas correcto, pero en mi caso, he importado la clase en la actividad, he puesto esta linea DecimalFormat df = new DecimalFormat("0.00"); y luego he cargado el df.format directamente en el setText, me ha quedado perfecto. Muchas gracias!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 00:09:10 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007