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.


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


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.


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.


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.


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.


3

Kotlin

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

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

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

esse código funciona


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.


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.


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+"";

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.


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


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

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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.