Conversion du double en chaîne


202

Je ne suis pas sûr que ce soit moi ou quoi, mais j'ai un problème pour convertir un double en chaîne.

voici mon code:

double total = 44;
String total2 = Double.toString(total);

Suis-je en train de faire quelque chose de mal ou manque-t-il une étape ici.

Je reçois une erreur NumberFormatExceptionlors de la tentative de conversion.

totalCost.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    try {
      double priceG = Double.parseDouble(priceGal.getText().toString());
      double valG = Double.parseDouble(volGal.toString());
      double total = priceG * valG;
      String tot = new Double(total).toString();
      totalCost.setText(tot);
    } catch(Exception e) {
      Log.e("text", e.toString());
    }

    return false;
  }         
});

J'essaie de le faire dans un onTouchListener. Je posterai plus de code, essentiellement lorsque l'utilisateur touche la zone edittext, je veux que les informations calculent un remplissage de la zone edittext.


4
Cela me semble bien, quel problème avez-vous rencontré?
MByD

2
est-ce le vrai code que vous exécutez? ces lignes fonctionnent parfaitement.
mcabral

1
Double.toString (double) ne peut même pas lancer NumberFormatException - êtes-vous sûr que l'exception n'est pas levée ailleurs?
Random832

1
Il doit y avoir autre chose, cela devrait très bien fonctionner. ideone.com/btGrv
Kevin

1
Afficher le stacktrace et le code entier
Bozho

Réponses:


452
double total = 44;
String total2 = String.valueOf(total);

Cela convertira le double en chaîne


22
avoir ce qui suit à l'esprit si total = 1234567890123456 alors la chaîne devient "1.234567890123456E15" ce qui n'est très souvent pas ce que vous voulez
user1735824

6
une solution pour au-dessus?
Prashanth Debbadwar

6
@PrashanthDebbadwar Oui: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);alors utiliseztotal2 = fmt.format(total)
Andreas

Cela appelle en interne Double.toString(). Je ne sais pas comment cela répond à la question.
shmosel

24

En utilisant Double.toString (), si le nombre est trop petit ou trop grand, vous obtiendrez une notation scientifique comme celle-ci: 3.4875546345347673E-6. Il existe plusieurs façons d'avoir plus de contrôle sur le format de la chaîne de sortie.

double num = 0.000074635638;
// use Double.toString()
System.out.println(Double.toString(num));
// result: 7.4635638E-5

// use String.format
System.out.println(String.format ("%f", num));
// result: 0.000075
System.out.println(String.format ("%.9f", num));
// result: 0.000074636

// use DecimalFormat
DecimalFormat decimalFormat = new DecimalFormat("#,##0.000000");
String numberAsString = decimalFormat.format(num);
System.out.println(numberAsString);
// result: 0.000075

Utilisez String.format () sera le meilleur moyen pratique.


14

Ce code se compile et fonctionne pour moi. Il convertit un double en chaîne en utilisant les appels que vous avez essayés.

public class TestDouble {

    public static void main(String[] args) {
        double total = 44;
        String total2 = Double.toString(total);

        System.out.println("Double is " + total2);
    }
}

Je suis perplexe en voyant l'Exception NumberFormatException. Regardez la trace de la pile. Je suppose que vous avez un autre code que vous ne montrez pas dans votre exemple, ce qui provoque la levée de cette exception.


Je suis perplexe en voyant l'Exception NumberFormatException. Regardez la trace de la pile. Je suppose que vous avez un autre code que vous ne montrez pas dans votre exemple, ce qui provoque la levée de cette exception.
ditkin

1
Il en va de même pour le code de l'OP. Il n'y a pas de problème à résoudre ici.
Brian Roach

possible, j'essaie de le faire dans un onTouchListener. Je posterai plus de code, essentiellement lorsque l'utilisateur touche la zone edittext, je veux que les informations calculent un remplissage de la zone edittext.
Brandon Wilson

6

L'exception vient probablement des appels parseDouble (). Vérifiez que les valeurs données à cette fonction reflètent réellement un double.


3
double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

Ça marche. doit être répétitif.


3

Kotlin

Vous pouvez utiliser .toStringdirectement sur n'importe quel type de données dans kotlin, comme

val d : Double = 100.00
val string : String = d.toString()

1
double total = 44;
String total2= new Double(total).toString();

ce code fonctionne


3
Double.toString()appels String.valueOf(double)qui appelle Double.toString(double). Fou, hein?
corsiKa

Il en va de même pour le code de l'OP. Il n'y a pas de problème à résoudre ici.
Brian Roach

2
@Muhammed - Possible ?? C'est ce qu'il fait
Brian Roach

2
@Muhammed bien, vous créez un objet juste pour obtenir sa valeur String. Si cela était dans une boucle quelconque, vous pourriez rencontrer beaucoup de frais supplémentaires (inutiles). Je ne suis pas un grand fan de l'optimisation prématurée, mais je suis un fan d'éviter les lacunes évidentes.
corsiKa

1
@Brian okey je comprends :) merci. Vous avez raison, tout comme glowcoder
olyanren

1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

L'un d'eux lève l'exception. Vous devez ajouter une journalisation / impression pour voir ce qui se trouve volGalet priceGal- ce n'est pas ce que vous pensez.


J'ai changé le total en un nombre dur comme 44 et cela m'a toujours donné une erreur.
Brandon Wilson

quel "total"? Votre extrait de code d'origine n'a pas pu lever cette exception. Les deux appels que je montre ci-dessus le peuvent. L'un de vos Strings n'est pas une représentation valide d'un, doublec'est pourquoi vous obtenez cette exception.
Brian Roach

Pour être clair; Double.toString(total); ne peut pas lever d'exception. Déjà. . Vous avez changé ce new Double(total).toString();qui ne peut pas non plus et si vous voyez ici la réponse qui a été rejetée, ce n'est jamais quelque chose que vous voulez faire.
Brian Roach

ok je vais changer ça. J'ai déplacé ce petit bout de code de l'écouteur ontouch et cela a bien fonctionné. mais quand il est dans l'écouteur ontouch, il renvoie l'erreur. J'essaie de le faire dans un onTouchListener. Je posterai plus de code, essentiellement lorsque l'utilisateur touche la zone edittext, je veux que les informations calculent un remplissage de la zone edittext.
Brandon Wilson

1

double.toString()devrait marcher. Pas le type de variable Double, mais la variable elle-même double.


vous devriez considérer que parfois il renverra un nombre avec une notation scientifique E comme -2.23561E5
Augustas

0

Utilisez simplement ce qui suit:

doublevalue+""; 

Cela fonctionnera pour tout type de données.

Exemple:

Double dd=10.09;
String ss=dd+"";

7
Très mauvaise habitude de stringifier en ajoutant à une chaîne vide. Utilisez plutôt la fonction JDK dédiée
StackHola

2
@ Michael.P pourquoi est-ce mauvais?
gab06

Je fais ça depuis tout mon temps en tant que programmeur java lol.
gab06

1
À moins qu'il y ait une optimisation au moment de la compilation en jeu, il appelle un constructeur supplémentaire et une méthode d'ajout.
dsmith

1
Utilisez toujours String.valueOf (dd) à la place. Cela fonctionnera également pour tout type de données.
BladeCoder du

0

Utilisez la StringBuilderclasse, comme ceci:

StringBuilder meme = new StringBuilder(" ");

// Convert and append your double variable
meme.append(String.valueOf(doubleVariable));

// Convert string builder to string
jTextField9.setText(meme.toString());

Vous obtiendrez la sortie souhaitée.


0

Et quand vous faites le

totalCost.setText(tot);

Tu fais juste

totalCost.setText( "" + total );

Où le "" + <variable> le convertira automatiquement en chaîne


0

Information complète

Vous pouvez utiliser String.valueOf () pour float, double, int, boolean etc.

double d = 0;
float f = 0;
int i = 0;
short i1 = 0;
char c = 0;
boolean bool = false;
char[] chars = {};
Object obj = new Object();


String.valueOf(d);
String.valueOf(i);
String.valueOf(i1);
String.valueOf(f);
String.valueOf(c);
String.valueOf(chars);
String.valueOf(bool);
String.valueOf(obj);

0

Il existe trois façons de convertir le double en chaîne .

  1. Double.toString (d)
  2. String.valueOf (d)
  3. "" + d

    classe public DoubleToString {

    public static void main(String[] args) {
        double d = 122;
        System.out.println(Double.toString(d));
        System.out.println(String.valueOf(d));
        System.out.println(""+d);
    
    }

    }

Chaîne à doubler

  1. Double.parseDouble (str);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.