Двойное преобразование Java в строку без форматирования - PullRequest
29 голосов
/ 27 октября 2009

У меня есть номер 654987. Это идентификатор в базе данных. Я хочу преобразовать это в строку. Обычное Double.ToString (значение) превращает его в научную форму, 6.54987E5. Что-то, чего я не хочу.

Другие найденные мной функции форматирования проверяют текущую локаль и добавляют соответствующие тысячи разделителей и тому подобное. Поскольку это идентификатор, я вообще не могу принимать форматирование.

Как это сделать?

[Изменить] Чтобы уточнить: я работаю над специальной базой данных, которая обрабатывает все числовые столбцы как двойные Double - единственный (числовой) тип, который я могу извлечь из базы данных.

Ответы [ 9 ]

32 голосов
/ 27 октября 2009

Используйте фиксированный NumberFormat (в частности, DecimalFormat):

double value = getValue();
String str = new DecimalFormat("#").format(value);

альтернативно просто приведите к int (или long, если диапазон значений слишком велик):

String str = String.valueOf((long) value);

Но опять же: почему у вас есть целочисленное значение (то есть "целое" число) в переменной double, во-первых?

20 голосов
/ 27 октября 2009

Использовать долго:

long id = 654987;
String str = Long.toString(id);
6 голосов
/ 27 октября 2009

Как насчет String.valueOf((long)value);

6 голосов
/ 27 октября 2009

Если это целочисленный идентификатор в базе данных, используйте вместо него целое число. Затем он будет отформатирован как целое число.

2 голосов
/ 09 сентября 2013

Также вы можете использовать

double value = getValue();

NumberFormat f = NumberFormat.getInstance();
f.setGroupingUsed(false);

String strVal = f.format(value);
2 голосов
/ 27 октября 2009

А как же:

Long.toString(value)

или

new String(value)
1 голос
/ 27 октября 2009

Если то, что вы храните, является идентификатором (то есть чем-то, что используется только для идентификации другого объекта, чье фактическое числовое значение не имеет значения), то вам не следует использовать Double для его хранения. Точность почти наверняка вас затянет.

Если ваша база данных не допускает целочисленных значений, то вы должны хранить идентификаторы в виде строк. Если необходимо, сделайте строку строковым представлением целого числа, которое вы хотите использовать. При правильном использовании начальных нулей вы можете сделать буквенный порядок строк таким же, как и числовой порядок целых.

Это должно помочь вам решить проблему.

0 голосов
/ 05 ноября 2014

А как насчет значения Long.toString ((long))?

0 голосов
/ 27 октября 2009
    double d = 56789;
    String s = d+"";
...