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);
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.
essaye ceci:
double d= Double.parseDouble(yourString);
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 ()
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.
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;
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
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());
}
});
String sc1="0.0";
Double s1=Double.parseDouble(sc1.toString());