Перетворення подвійного в рядок


201

Я не впевнений, це я чи що, але у мене виникають проблеми з перетворенням подвійного на рядок.

ось мій код:

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

Я роблю щось не так або я пропускаю крок тут.

Я отримую помилку NumberFormatExceptionпри спробі перетворити це.

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

Я намагаюся зробити це в onTouchListener. Повідомляю більше коду, в основному, коли користувач торкається вікна редагування тексту, я хочу, щоб інформація обчислювала заповнення поля редагування тексту.


4
Мені здається прекрасним, з якою проблемою ви стикалися?
MByD

2
це справжній код, який ви виконуєте? ці лінії працюють ідеально.
mcabral

1
Double.toString (double) навіть не може викинути NumberFormatException - ви впевнені, що виняток не кидається з іншого місця?
Випадково832

1
Має бути щось інше, це має спрацювати чудово. ideone.com/btGrv
Кевін

1
Показати стек-трек та весь код
Божо

Відповіді:


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

Це перетворить подвійне в String


22
майте на увазі наступне, якщо сумарно = 1234567890123456, тоді рядок стає "1,2234567890123456E15", що дуже часто не є тим, що ви хочете
користувач1735824

6
будь-яке рішення вище одного?
Prashanth Debbadwar

6
@PrashanthDebbadwar Так: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);тоді використовуйтеtotal2 = fmt.format(total)
Андреас

Це внутрішньо закликає Double.toString(). Не впевнений, як це відповідає на питання.
шмосель

23

Використовуючи Double.toString (), якщо число занадто мало або занадто велике, ви отримаєте наукові позначення на зразок цього: 3.4875546345347673E-6. Існує кілька способів більш контролювати вихідний рядок.

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 () буде найкращим зручним способом.


14

Цей код складається для мене і працює. Він перетворює дубль у рядок за допомогою викликів, які ви намагалися.

public class TestDouble {

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

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

Мене спантеличує ваше бачення NumberFormatException. Подивіться на слід стека. Я здогадуюсь, у вас є інший код, який ви не показуєте у своєму прикладі, що спричиняє викид цього винятку.


Мене спантеличує ваше бачення NumberFormatException. Подивіться на слід стека. Я здогадуюсь, у вас є інший код, який ви не показуєте у своєму прикладі, що спричиняє кидання цього винятку.
ditkin

1
Так само і в коді ОП. Тут немає проблеми, яку потрібно вирішити.
Брайан Роуч

можливо, я намагаюся зробити це в onTouchListener. Повідомляю більше коду, в основному, коли користувач торкається вікна редагування тексту, я хочу, щоб інформація обчислювала заповнення поля редагування тексту.
Brandon Wilson

6

Виняток, ймовірно, відбувається з викликів parseDouble (). Переконайтесь, що значення, задані цій функції, справді відображають подвійне.


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

це працює. повинен бути повторюваним.


3

Котлін

Ви можете використовувати .toStringбезпосередньо будь-який тип даних у kotlin, наприклад

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

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

цей код працює


3
Double.toString()дзвінки, String.valueOf(double)які дзвонять Double.toString(double). Божевільний, так?
corsiKa

Так само і в коді ОП. Тут немає проблеми, яку потрібно вирішити.
Брайан Роуч

2
@ Мухаммед - можливо ?? Це те, що він робить
Брайан Роуч

2
@ Мухаммед добре, ви створюєте об'єкт лише для того, щоб отримати його значення String. Якби це було в певному циклі, ви могли б випробувати багато додаткових (непотрібних) накладних витрат. Я не великий фанат передчасної оптимізації, але я прихильник уникати явних недоліків.
corsiKa

1
@Brian okey Я розумію :) дякую. Ви маєте рацію, так і glowcoder
olyanren

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

Одне з них - кидання винятку. Вам потрібно додати деякий журнал / друк, щоб побачити, що там - volGalі priceGalце не те, що ви думаєте.


Я змінив загальну цифру на 44, і це все ще призвело до помилки.
Брендон Вілсон

що "загальний"? Ваш оригінальний фрагмент коду не міг викинути цей виняток. Два дзвінки, які я показую вище, можуть. Один з ваших Stringне є дійсним представленням double, тому ви отримуєте це виключення.
Брайан Роуч

Бути зрозумілим; Double.toString(total); не можна кидати виняток. Колись. . Ви змінили те, на new Double(total).toString();що також не можете, і якщо ви бачите відповідь, яку тут проголосували, це не те, що ви хочете робити.
Брайан Роуч

гаразд погано зрозуміти, що змінилося. Я перемістив цей літ-біт коду з онтоутворювача, і він працював чудово. але коли він знаходиться в онтоутворювачі, він видає помилку. Я намагаюся зробити це в onTouchListener. Повідомляю більше коду, в основному, коли користувач торкається вікна редагування тексту, я хочу, щоб інформація обчислювала заповнення поля редагування тексту.
Брендон Вілсон

1

double.toString()повинен працювати. Не тип змінної Double, а сама змінна double.


Ви повинні враховувати , що іноді він буде повертати число з E експоненційному як -2.23561E5
Аугустас

0

Просто використовуйте наступне:

doublevalue+""; 

Це буде працювати для будь-якого типу даних.

Приклад:

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

7
Дуже погана звичка стримувати, додаючи до порожнього рядка. Використовуйте замість цього виділений функціонал JDK
StackHola

2
@ Майкл. Чому це погано?
gab06

Я робив це, як і весь свій час, як програміст Java, хаха.
gab06

1
Якщо не буде певної оптимізації часу компіляції в процесі гри, це зажадає додатковий конструктор і метод додавання.
дмсміт

1
Завжди використовуйте String.valueOf (dd) замість цього. Це також буде працювати для будь-якого типу даних.
BladeCoder

0

Використовуйте StringBuilderклас, наприклад:

StringBuilder meme = new StringBuilder(" ");

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

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

Ви отримаєте бажаний результат.


0

Як щодо того, коли ви робите це

totalCost.setText(tot);

Ви просто робите

totalCost.setText( "" + total );

Де "" + <змінна> перетворить його в рядок автоматично


0

Повна інформація

Ви можете використовувати String.valueOf () для float, double, int, boolean і т.д.

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

Існує три способи перетворення подвійного на String .

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

    публічний клас 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);
    
    }

    }

Рядок подвоїться

  1. Double.parseDouble (str);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.