Çifte dizeyi dönüştürme


202

Ben ya da ne olduğundan emin değilim ama dize bir çift dönüştürme bir sorun yaşıyorum.

İşte benim kod:

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

Yanlış bir şey mi yapıyorum yoksa burada bir adım eksik mi?

Bunu NumberFormatExceptiondönüştürmeye çalışırken hata alıyorum .

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

Bunu bir onTouchListener'da yapmaya çalışıyorum. Hasta daha fazla kod gönderir, temelde kullanıcı düzenleme metni kutusuna dokunduğunda bilgilerin düzenleme metni kutusunu doldurmasını hesaplamasını isterim.


4
Bana iyi geliyor, hangi problemle karşılaştın?
MByD

2
yürütmekte olduğunuz gerçek kod bu mu? bu çizgiler mükemmel çalışıyor.
mcabral

1
Double.toString (double), NumberFormatException öğesini bile atamaz - istisnanın başka bir yerden atılmadığından emin misiniz?
Random832

1
Başka bir şey olmalı, bu iyi çalışmalı. ideone.com/btGrv
Kevin

1
Stacktrace ve tüm kodu göster
Bozho

Yanıtlar:


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

Bu, çiftleri String'e dönüştürür


22
total = 1234567890123456 ise aklınızda bulundurun, o zaman String "1.234567890123456E15" olur, ki bu genellikle istediğiniz şey değildir
user1735824

6
biri için herhangi bir çözüm?
Prashanth Debbadwar

6
@PrashanthDebbadwar Evet: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);sonra kullanıntotal2 = fmt.format(total)
Andreas

Bu dahili olarak arar Double.toString(). Soruyu nasıl cevapladığından emin değilim.
shmosel

24

Double.toString () kullanarak, sayı çok küçük veya çok büyükse, aşağıdaki gibi bilimsel bir gösterim alırsınız: 3.4875546345347673E-6. Çıkış dizesi biçimi üzerinde daha fazla denetim sahibi olmanın birkaç yolu vardır.

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

String.format () yöntemini kullanmak en uygun yöntem olacaktır.


14

Bu kod benim için derler ve çalışır. Denediğiniz çağrıları kullanarak bir çifte bir katar dönüştürür.

public class TestDouble {

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

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

NumberFormatException'ı gördüğünüzde şaşkınım. Yığın izine bak. Bu istisna atılmasına neden olan örneğinizde göstermiyorum diğer kod var sanırım.


NumberFormatException'ı gördüğünüzde şaşkınım. Yığın izine bak. Bu istisna atılmasına neden olan örneğinizde göstermiyorum diğer kod var sanırım.
ditkin

1
OP'nin kodu da öyle. Burada çözülmesi gereken bir sorun yok.
Brian Roach

mümkün, ben bir onTouchListener bunu yapmaya çalışıyorum. Hasta daha fazla kod gönderir, temelde kullanıcı düzenleme metni kutusuna dokunduğunda bilgilerin düzenleme metni kutusunu doldurmasını hesaplamasını isterim.
Brandon Wilson

6

İstisna muhtemelen parseDouble () çağrılarından gelir. Bu işleve verilen değerlerin gerçekten iki katı yansıttığını kontrol edin.


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

işe yarıyor. tekrarlayıcı olmalı.


3

Kotlin

.toStringKotlin'deki herhangi bir veri türünde doğrudan kullanabilirsiniz , örneğin

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

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

bu kod çalışıyor


3
Double.toString()çağrıları String.valueOf(double)hangi aramaları Double.toString(double). Deli mi?
corsiKa

OP'nin kodu da öyle. Burada çözülmesi gereken bir sorun yok.
Brian Roach

2
@Muhammed - Mümkün mü ?? Ne yapar
Brian Roach

2
@Muhammed iyi, sadece String değerini almak için bir nesne oluşturuyorsunuz. Bu bir çeşit döngü içinde olsaydı, çok fazla (gereksiz) ek yük yaşayabilirsiniz. Erken optimizasyonun büyük bir hayranı değilim, ancak bariz eksikliklerden kaçınmanın hayranıyım.
corsiKa

1
@Brian okey anlıyorum :) teşekkür ederim. Haklısın, glowcoder da
olyanren

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

Bunlardan biri istisnayı atmak. İçinde ne olduğunu görmek için bazı günlük / baskı eklemeniz gerekir volGalve priceGalbu sizin düşündüğünüz şey değildir.


Toplamı 44 gibi sert bir sayıya değiştirdim ve hala bana bir hata verdi.
Brandon Wilson

ne "toplam"? Orijinal kod snippitiniz bu istisnayı atamadı. Yukarıda gösterdiğim iki çağrı olabilir. Biriniz Stringgeçerli bir temsili değil double, bu yüzden bu istisnayı alıyorsunuz.
Brian Roach

Açık olmak gerekirse; Double.toString(total); bir istisna atamaz. Hiç. . Bunu da değiştiremezsiniz new Double(total).toString();ve burada oylanan cevabı görürseniz, yapmak istediğiniz bir şey değildir.
Brian Roach

tamam bu değişti. Bu küçük kod biraz ontolister dışına taşındı ve iyi çalıştı. ancak gözcü listesindeyken hatayı atar. Bunu bir onTouchListener'da yapmaya çalışıyorum. Hasta daha fazla kod gönderir, temelde kullanıcı düzenleme metni kutusuna dokunduğunda bilgilerin düzenleme metni kutusunu doldurmasını hesaplamasını isterim.
Brandon Wilson

1

double.toString()çalışmalı. Değişken türü Doubledeğil, değişkenin kendisi double.


bazen -2.23561E5
Augustas

0

Sadece aşağıdakileri kullanın:

doublevalue+""; 

Bu, herhangi bir veri türü için çalışacaktır.

Misal:

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

7
Boş bir String ekleyerek stringize etmek çok kötü bir alışkanlık. Bunun yerine özel JDK
işlevini

2
@ Michael.P neden bu kadar kötü?
gab06

Bunu bir java programcısı lol olarak tüm zamanlarım için yapıyorum.
gab06

1
Oyunda derleme zamanı optimizasyonu yoksa, ek bir kurucu ve ekleme yöntemi çağırır.
dsmith

1
Bunun yerine her zaman String.valueOf (dd) kullanın. Bu, herhangi bir veri türü için de çalışır.
BladeCoder

0

StringBuilderSınıfı şu şekilde kullanın :

StringBuilder meme = new StringBuilder(" ");

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

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

İstediğiniz çıktıyı alacaksınız.


0

Ne zaman yapıyorsun

totalCost.setText(tot);

Sadece yap

totalCost.setText( "" + total );

"" + <Değişkeni> otomatik olarak dizeye dönüştürür


0

Komple Bilgi

Float, double, int, boolean vb.Için String.valueOf () yöntemini kullanabilirsiniz.

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

Çifte Dize dönüştürmek için üç yolu vardır .

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

    herkese açık sınıf 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);
    
    }

    }

Çifte dize

  1. Double.parseDouble (str);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.