Convertendo Double para String

202

Não tenho certeza de que sou eu ou o quê, mas estou tendo um problema ao converter um dobro em string.

aqui está o meu código:

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

Estou fazendo algo errado ou estou perdendo um passo aqui.

Eu recebo um erro NumberFormatExceptionao tentar converter isso.

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;
  }         
});

Estou tentando fazer isso em um onTouchListener. Vou postar mais código, basicamente quando o usuário toca na caixa do edittext, quero que as informações calculem e preencham a caixa do edittext.

Brandon Wilson
fonte
4
Parece bom para mim, que problema você encontrou?
MByD 23/04
2
esse é o código real que você está executando? essas linhas funcionam perfeitamente.
Mcabral
1
Double.toString (double) não pode nem lançar NumberFormatException - você tem certeza de que a exceção não está sendo lançada de outro lugar?
Random832
1
Deve haver algo mais, isso deve funcionar muito bem. ideone.com/btGrv
Kevin
1
Mostrar stacktrace e todo o código
Bozho 23/04

Respostas:

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

Isso converterá o dobro para String

Bhavit S. Sengar
fonte
22
tem o seguinte em mente se o total = 1234567890123456 então a string se torna "1.234567890123456E15", que muitas vezes não é o que você quer
user1735824
6
alguma solução para acima de um?
Prashanth Debbadwar
6
@PrashanthDebbadwar Sim: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);então usetotal2 = fmt.format(total)
Andreas
Isso chama internamente Double.toString(). Não tenho certeza de como responde à pergunta.
shmosel
24

Usando Double.toString (), se o número for muito pequeno ou muito grande, você receberá uma notação científica como esta: 3.4875546345347673E-6. Existem várias maneiras de ter mais controle do formato da string de saída.

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

Usar String.format () será a melhor maneira conveniente.

Nicholas Lu
fonte
14

Este código compila e funciona para mim. Ele converte um dobro em uma string usando as chamadas que você tentou.

public class TestDouble {

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

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

Estou intrigado com o fato de você ver o NumberFormatException. Veja o rastreamento da pilha. Suponho que você tenha outro código que não esteja mostrando no seu exemplo que está causando a exceção.

ditkin
fonte
Estou intrigado com o fato de você ver o NumberFormatException. Veja o rastreamento da pilha. Suponho que você tenha outro código que não esteja mostrando no seu exemplo que está causando a exceção.
ditkin
1
O mesmo acontece com o código do OP. Não há um problema aqui a ser resolvido.
Brian Roach
possível, estou tentando fazer isso em um onTouchListener. Vou postar mais código, basicamente quando o usuário toca na caixa do edittext, quero que as informações calculem e preencham a caixa do edittext.
23611 Brandon Wilson
6

A exceção provavelmente vem das chamadas parseDouble (). Verifique se os valores fornecidos para essa função realmente refletem um dobro.

Stephan
fonte
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());

funciona. tem que ser repetitivo.

de novo
fonte
3

Kotlin

Você pode usar .toStringdiretamente em qualquer tipo de dados no kotlin, como

val d : Double = 100.00
val string : String = d.toString()
Khemraj
fonte
1
double total = 44;
String total2= new Double(total).toString();

esse código funciona

olyanren
fonte
3
Double.toString()chama String.valueOf(double)quais chamadas Double.toString(double). Louco, não é?
precisa saber é o seguinte
O mesmo acontece com o código do OP. Não há um problema aqui a ser resolvido.
Brian Roach
2
@Muhammed - Possível ?? É o que ele faz
Brian Roach
2
@ Muhammed, você está criando um objeto apenas para obter seu valor String. Se isso ocorrer em algum tipo de loop, você poderá enfrentar muitas sobrecargas adicionais (desnecessárias). Não sou muito fã de otimização prematura, mas sou fã de evitar deficiências óbvias.
corsiKa
1
@ Brian Okey eu entendo :) obrigado. Você está certo, o mesmo acontece com glowcoder
olyanren
1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

Um deles está lançando a exceção. Você precisa adicionar algum registro / impressão para ver o que há volGale priceGal- não é o que você pensa.

Brian Roach
fonte
Alterei o total para um número difícil como 44 e ainda assim me deu um erro.
Brandon Wilson
o que "total"? Seu snippit de código original não pôde lançar essa exceção. As duas chamadas que mostro acima podem. Um dos seus Strings não é uma representação válida de um doublemotivo pelo qual você está recebendo essa exceção.
Brian Roach
Para ser claro; Double.toString(total); não pode lançar uma exceção. Sempre. . Você mudou para algo new Double(total).toString();que também não pode e, se vir aqui a resposta que foi rejeitada, não é algo que você queira fazer.
Brian Roach
ok, vou mudar isso. Mudei esse pequeno pedaço de código do ouvinte ontouch e funcionou bem. mas quando está no ouvinte ontouch, gera o erro. Estou tentando fazer isso em um onTouchListener. Vou postar mais código, basicamente quando o usuário toca na caixa do edittext, quero que as informações calculem e preencham a caixa do edittext.
Brandon Wilson
1

double.toString()Deveria trabalhar. Não é o tipo de variável Double, mas a própria variável double.

Matt F.
fonte
você deve considerar que, às vezes, retornará um número com notação científica E como -2.23561E5
Augustas
0

Basta usar o seguinte:

doublevalue+""; 

Isso funcionará para qualquer tipo de dados.

Exemplo:

Double dd=10.09;
String ss=dd+"";
Rahul Purohit
fonte
7
Muito mau hábito de modificar, adicionando a uma String vazia. Use func JDK dedicado em vez disso
StackHola 15/01
2
@ Michael.P por que isso é ruim?
precisa saber é
Eu tenho feito isso por todo o meu tempo como programador java lol.
precisa saber é
1
A menos que haja alguma otimização em tempo de compilação em execução, ele chamaria um construtor adicional e acrescentaria um método.
dsmith
1
Sempre use String.valueOf (dd). Isso também funcionará para qualquer tipo de dados.
BladeCoder #
0

Use StringBuilderclasse, assim:

StringBuilder meme = new StringBuilder(" ");

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

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

Você obterá a saída desejada.

abhishek sheregar
fonte
0

Que tal quando você faz o

totalCost.setText(tot);

Você apenas faz

totalCost.setText( "" + total );

Onde o "" + <variável> o converterá em string automaticamente

Francisco Azevedo
fonte
0

Informações completas

Você pode usar String.valueOf () para float, double, int, booleano 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);
Khemraj
fonte
0

Existem três maneiras de converter duplo em String .

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

    classe pública 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);
    
    }

    }

String to double

  1. Double.parseDouble (str);
Neeraj Gahlawat
fonte