Conversion de la chaîne de caractères en double dans Android

essayer d'obtenir des valeurs doubles à partir d'un texte édité et les manipuler avant de les passer à une autre intention. Je n'utilise pas le type de données primitif donc je peux utiliser des méthodes de suivi.

le problème est quand j'inclus la protéine = Double.valueOf (p).doubleValue (); style commands, le programme force ferme immédiatement sans laisser aucune info dans le logcat.Si je les commente et que je place des données factices comme protein = 1.0, cela fonctionne sans problème. Il en va de même pour les types de données primitifs et les analyses double. Ce code fonctionne parfaitement avec des données factices dans java normal. Ce que je fais mal?

EditText txtProt, txtCarb, txtFat, txtFiber, txtPoints;
String p, c, f, fi;
Double protein, carbs, fat, fiber;
double temp;
Integer points;

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     Log.v("Create Prompt", "ready for layout");
     setContentView(R.layout.main);
     Log.v("Layout Created", "ready for variable assignment");
     txtProt = (EditText) findViewById(R.id.Protein);
     txtCarb = (EditText) findViewById(R.id.Carbs);
     txtFat = (EditText) findViewById(R.id.Fat);
     txtFiber = (EditText) findViewById(R.id.Fiber);
     txtPoints = (EditText) findViewById(R.id.Points);
     btnCalc = (Button) findViewById(R.id.Calc);
     Log.v("Variables Assigned", "ready for double assignment");

     p = txtProt.getText().toString();
     c = txtCarb.getText().toString();
     f = txtFat.getText().toString();
     fi = txtFiber.getText().toString();


     protein=Double.valueOf(p).doubleValue();
     carbs=Double.valueOf(c).doubleValue();
     fat=Double.valueOf(f).doubleValue();
     fiber=Double.valueOf(fi).doubleValue();
     Log.v("Doubles parsed", "ready for calculations");
     //these are the problem statements

     protein = 1.0;
     carbs = 1.0;
     fat = 1.0;
     fiber = 1.0;

     protein *= 16;
     carbs *= 19;
     fat *= 45;
     fiber *= 14;

     temp = protein + carbs + fat - fiber;
     temp = temp/175;

     points = new Integer((int) temp);
17
demandé sur nitind 2011-07-29 02:40:26

8 réponses

je voudrais faire de cette façon:

try {
  txtProt = (EditText) findViewById(R.id.Protein); // Same
  p = txtProt.getText().toString(); // Same
  protein = Double.parseDouble(p); // Make use of autoboxing.  It's also easier to read.
} catch (NumberFormatException e) {
  // p did not contain a valid double
}

EDIT: "le programme de la force se ferme immédiatement sans laisser aucune info dans le logcat"

je ne sais pas combat, ne laissant pas les informations dans le logcat de sortie, mais une force-close signifie généralement il y a une exception non interceptée - comme un NumberFormatException.

62
répondu Izkata 2011-07-29 00:14:18

essaye ceci:

double d= Double.parseDouble(yourString);
14
répondu Swapnil Lanjewar 2015-12-17 11:45:42

Vous semblez attribuer Double objet en natif double champ de valeur. Cette vraiment compiler?

Double.valueOf () crée un Double objet .doubleValue() ne devrait pas être nécessaire.

Si vous voulez natif double champ, vous devez définir le champ double et puis l'utiliser .doubleValue ()

4
répondu jkj 2011-07-28 22:52:21

Qu'en est-il de l'utilisation du constructeur Double(String)? Donc,

protein = new Double(p);

Je ne sais pas pourquoi ce serait différent, mais ça pourrait valoir le coup.

2
répondu MikeTheReader 2011-07-28 22:49:45

j'ai un problème similaire. pour formater correctement le contenu du texte EditText pour doubler la valeur, j'utilise ce code:

try {
        String eAm = etAmount.getText().toString();
        DecimalFormat dF = new DecimalFormat("0.00");
        Number num = dF.parse(eAm);
        mPayContext.amount = num.doubleValue();
    } catch (Exception e) {
        mPayContext.amount = 0.0d;
    }

ceci est indépendant de la localisation actuelle du téléphone et renvoie la bonne valeur double.

j'espère que c'est de l'aide;

2
répondu bershadskiy 2013-05-21 13:03:19

j'ai eu le même problème, mais j'ai juste compris que :

  • l'analyse de la valeur EditText dans la méthode Oncreate a causé le plantage de l'application parce que lorsque l'application démarre, il n'y a pas de valeurs à analyser ou peut-être les placeholders qui sont des lettres.

mon code:

package com.example.herodav.volumeapp;

import android.renderscript.Double2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.*;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    EditText height, length, depth;
    TextView volume;
    double h,l,d,vol;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        height = (EditText)findViewById(R.id.h);
        length = (EditText)findViewById(R.id.l);
        depth = (EditText)findViewById(R.id.d);
        volume = (TextView)findViewById(R.id.v);

        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calculateVolume();
                volume.setText("Volume = " + String.valueOf(vol));
            }
        });
    }

    public void calculateVolume(){
        h = Double.parseDouble(height.getText().toString());
        l = Double.parseDouble(length.getText().toString());
        d = Double.parseDouble(depth.getText().toString());
        vol = h*l*d;
    }
}

I

2
répondu Hero 2018-01-07 23:25:18
  kw=(EditText)findViewById(R.id.kw);
    btn=(Button)findViewById(R.id.btn);
    cost=(TextView )findViewById(R.id.cost);


            btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { cst =  Double.valueOf(kw.getText().toString());
            cst = cst*0.551;
            cost.setText(cst.toString());
        }
    });
1
répondu Areej Qasrawi 2016-04-16 04:17:54
String sc1="0.0";
Double s1=Double.parseDouble(sc1.toString());
0
répondu Neha Trivedi 2015-11-25 10:41:50