Ver la Versión Completa : [ CONSULTA ] Necesito ayuda, mostrar solo 2 decimales
pronick
27/12/10, 17:36:59
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(campoCantidad.getText().toStri ng())*1.3117);
campoLibra.setText(""+Double.parseDouble(campoCantidad.getText().toStri ng())/0.85030);
campoPeseta.setText(""+Double.parseDouble(campoCantidad.getText().toStri ng())*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.
asturdeibiz
27/12/10, 21:09:25
Hola, con la clase DecimalFormat lo puedes conseguir, la manera de utilizarla sería la siguiente:
//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.
pronick
28/12/10, 00:17:54
Muchas gracias. :D me ha venido de lujo
pronick
30/12/10, 16:25:31
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();
}
});
asturdeibiz
30/12/10, 20:47:38
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.
pronick
03/01/11, 00:02:39
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.
asturdeibiz
03/01/11, 01:14:46
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/reference/android/R.styleable.html#EditText
y también puedes verlo más claramente aquí y los tipos que hay:
http://www.androidpeople.com/android-edittext-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!
pronick
04/01/11, 02:03:53
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.
asturdeibiz
04/01/11, 10:09:45
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!
JulioFalcon
08/09/11, 21:14:50
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
tamudasus23
30/10/12, 23:47:07
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!:ok:
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.