Aller au contenu

[Résolu] Problème de décimale


Noplait

Recommended Posts

Bonsoir à tous,

Je suis en train d'apprendre à programmer avec android, j'avais quasiment fini ma 1ère application. Et je me suis rendu du compte d'un bug en passant de l'émulateur sur un vrai téléphone. C'est une application simple de calcul.

Ce qui me pose problème c'est le formatage du résultat avec 2 décimales. Mon code fonctionne sur l'émulateur mais me provoque un force close sur un vrai téléphone (HTC desire + Htc Wildfire).

Voici le bout de code qui pose problème :

//Formatage
                       DecimalFormat df = new DecimalFormat();
                       df.setMaximumFractionDigits(2);
                       DoubleResultat2 = Double.parseDouble(df.format(DoubleResultat));

J'ai 2 editext à partir desquels je récupère les valeurs en string.

Je convertis ensuite le string en double avec un catch numberexception pour vérifier si l'utilisateur a bien entré un nombre et j'affiche le résultat du calcul dans une textview.

....
   public static double DoubleCAM;
   public static double DoubleALB;
   public static double DoubleResultat;
   public static double DoubleResultat2;

.....

BtnCalculer.setOnClickListener(
               new View.OnClickListener() 
               {
                   @Override
                   public void onClick(View v) 
                   {
                       // Toast
                       Context context = getApplicationContext();
                       CharSequence text = "Veuillez entrer des chiffres uniquement !";
                       int duration = Toast.LENGTH_SHORT;
                       Toast toast = Toast.makeText(context, text, duration);

                       // Récupère les données
                       String StringCAM = EditTextCAM.getText().toString();
                       String StringALB = EditTextALB.getText().toString();

                       // Verifie qu'on a entré un nombre
                       try 
                       {
                       //Calcul                   	
                       DoubleCAM = Double.valueOf(StringCAM);
                       DoubleALB = Double.valueOf(StringALB);
                       DoubleResultat = DoubleCAM + 0.025*(40-DoubleALB);
                       }
                       catch (NumberFormatException n) {toast.show();}

                     //Formatage
                       DecimalFormat df = new DecimalFormat();
                       df.setMaximumFractionDigits(2);
                       DoubleResultat2 = Double.parseDouble(df.format(DoubleResultat));

                     // Affichage du résultat
                       TextViewResultat.setText("Résultat = " + String.valueOf(DoubleResultat2));
}
                       }
                  );

Ce code fonctionne sur l'émulateur. Pas sur le téléphone :( (???)

Quand j'enlève le bout de code pour le formatage cela le calcul fonctionne sur le téléphone aussi.

J'ai essayé de mettre le Formatage décimal dans le try{} il me renvoit systématiquement sur le toast, en gros NumberException.

Auriez vous une idée de correction pour mon code ou tout simplement une autre méthode pour gérer les décimales.

Merci beaucoup. Ca fait 3 heures que je m'arrache les cheveux là dessus :D

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse,

En fait je suis sous ubuntu 9.04 et je n'arrive pas à faire reconnaître mon desire sous adb et quand je dis que l'erreur se produit sur le téléphone c'est parce que je compile l'apk et installe manuellement sur mon téléphone ^^

Je vais essayer de faire ça sous windows et de trouver l'exception.

Edit : bon j'ai réussi à régler ce problème de permissions avec adb :)

Voici le log sur mon htc desire :

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): FATAL EXCEPTION: main

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): java.lang.NumberFormatException:

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.Double.parseDouble(Double.java:287)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.mediformules.Cacorr$1.onClick(Cacorr.java:68)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.view.View.performClick(View.java:2421)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.view.View$PerformClick.run(View.java:8867)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Handler.handleCallback(Handler.java:587)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Handler.dispatchMessage(Handler.java:92)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.os.Looper.loop(Looper.java:143)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at android.app.ActivityThread.main(ActivityThread.java:5068)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.reflect.Method.invokeNative(Native Method)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at java.lang.reflect.Method.invoke(Method.java:521)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

02-05 13:36:36.797: ERROR/AndroidRuntime(1499): at dalvik.system.NativeStart.main(Native Method)

Edit2 : Bon j'ai finalement résolu le problème.

Pour ceux que ça intéresse, pour formater à 2 décimales :

//Formatage
                       DecimalFormat df = new DecimalFormat("0.00");

                       // Affichage du résultat
                       TextViewResultat.setText("Résultat = " + df.format(DoubleResultat));

C'est tout de même curieux que eclipse ne me donne pas d'erreur sur l'ancien code et ce qui est encore plus bizarre c'est que j'avais réussi à faire fonctionner cet ancien code sur mon ancienne ROM c'est en changeant de ROM pour une ROM DesireHD que le problème s'est revelé.

Tchao

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...