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


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.