Преобразование двойного в строку


202

Я не уверен, что это я или что, но у меня проблема с преобразованием двойного в строку.

вот мой код:

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. Я опубликую больше кода, в основном, когда пользователь касается поля edittext, я хочу, чтобы информация вычисляла заполнение поля edittext.


4
Мне кажется, с какой проблемой вы столкнулись?
MByD

2
это реальный код, который вы выполняете? эти линии работают идеально.
mcabral

1
Double.toString (double) не может даже выдать NumberFormatException - вы уверены, что исключение не генерируется откуда-то еще?
Random832

1
Там должно быть что-то еще, это должно работать просто отлично. ideone.com/btGrv
Кевин

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

Ответы:


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

Это преобразует double в строку


22
имейте в виду следующее, если total = 1234567890123456, тогда строка становится «1.234567890123456E15», что очень часто не то, что вы хотите
user1735824

6
любое решение для выше одного?
Прашант Деббадвар

6
@PrashanthDebbadwar Да: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);тогда используйтеtotal2 = fmt.format(total)
Андреас

Это внутренне называет Double.toString(). Не уверен, как это отвечает на вопрос.
Шмосель

24

Используя 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

Этот код компилируется и работает для меня. Он конвертирует значение типа double в строку, используя вызовы, которые вы пробовали.

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. Посмотрите на трассировку стека. Я предполагаю, что у вас есть другой код, который вы не показываете в своем примере, который вызывает это исключение.
Диткин

1
Так же как и код ОП. Здесь нет проблемы, которую нужно решить.
Брайан Роуч

возможно, я пытаюсь сделать это в onTouchListener. Я опубликую больше кода, в основном, когда пользователь касается поля edittext, я хочу, чтобы информация вычисляла заполнение поля edittext.
Брэндон Уилсон

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
@ Мухаммед, вы создаете объект только для того, чтобы получить его строковое значение. Если бы это было в каком-то цикле, вы могли бы испытать много дополнительных (ненужных) накладных расходов. Я не большой поклонник преждевременной оптимизации, но я сторонник избегания очевидных недостатков.
corsiKa

1
@ Брайан, ладно, я понимаю :) спасибо. Вы правы, как и световой кодер
olyanren

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

Одним из них является исключение. Вам нужно добавить журналирование / печать, чтобы увидеть, что внутри, volGalи priceGal- это не то, что вы думаете.


Я изменил общее число до жесткого числа, такого как 44, и это все равно дало мне ошибку.
Брэндон Уилсон

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

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

Хорошо, я получу это изменилось. Я переместил этот маленький кусочек кода из сенсорного прослушивателя, и он работал нормально. но когда он находится в слушателе, он выдает ошибку. Я пытаюсь сделать это в onTouchListener. Я опубликую больше кода, в основном, когда пользователь касается поля edittext, я хочу, чтобы информация вычисляла заполнение поля edittext.
Брэндон Уилсон

1

double.toString()должно сработать. Не тип переменной Double, а сама переменная double.


Вы должны учитывать , что иногда он будет возвращать число с E экспоненциальном как -2.23561E5
Аугустаса

0

Просто используйте следующее:

doublevalue+""; 

Это будет работать для любого типа данных.

Пример:

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

7
Очень плохая привычка к строковому добавлению в пустую строку. Вместо этого используйте выделенную функцию JDK
StackHola

2
@ Michael.P почему это плохо?
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 );

Где "" + <variable> автоматически преобразует его в строку


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

Есть три способа конвертировать double в String .

  1. Double.toString (д)
  2. String.valueOf (д)
  3. «» + Д

    открытый класс 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 (ул);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.