2009-10-27 5 views
29

Mam numer 654987. Jest to identyfikator w bazie danych. Chcę przekonwertować go na ciąg znaków. Regularne Double.ToString (wartość) czyni go w formie naukowej, 6.54987E5. Coś, czego nie chcę.Konwersja języka Java na format ciągły bez formatowania

Inne funkcje formatowania Ive found sprawdza bieżące ustawienia narodowe i dodaje odpowiednie separatory tysięcy i takie. Od tego czasu nie akceptuję żadnego formatowania.

Jak to zrobić?

[Edytuj] Aby wyjaśnić: pracuję nad specjalną bazą danych, która traktuje wszystkie kolumny numeryczne jako podwójne. Double to jedyny (numeryczny) typ, który mogę pobrać z bazy danych.

+3

Zobacz najlepszą odpowiedź na: http://stackoverflow.com/questions/47045/sprintf-equivalent-in-java Odpowiedzi na to samo pytanie. –

+1

654987 jest liczbą całkowitą, a nie podwójną. Czy miałeś na myśli coś innego? – Kai

+0

sprawdź to: http: // stackoverflow.com/pytania/1521122/java konwertazy-a-double-to-a-string/1521324 # 1521324 – JuanZe

Odpowiedz

20

Zastosowanie Long:

long id = 654987; 
String str = Long.toString(id); 
6

Jeśli jest to identyfikator typu integer w bazie danych, należy zamiast tego użyć liczby całkowitej. Następnie zostanie sformatowany jako liczba całkowita.

+0

Oczywiście w idealnym świecie, ale powodem jest to, że próbuję obejść ograniczenia w bazie danych; Jedyny (numeryczny) typ, który może przechowywać, to podwójny. – Mizipzor

2

Co o:

Long.toString(value) 

lub

new String(value) 
+4

Proszę nie sugerować '" "+ wartość"! To włamanie i nie oddaje intencji w żaden sposób. Powiedziałbym, że to zły styl. –

+0

Ok :) Zastąpiono to słowem "nowy ciąg (wartość)". –

+0

new Ciąg (wartość) będzie mieć taki sam problem, jak wspomniane pytanie, jeśli wartość jest "podwójnym". –

6

Jak o String.valueOf((long)value);

32

użyć stałego NumberFormat (konkretnie do DecimalFormat):

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

alternatywnie po prostu rzucić na int (lub long jeśli zakres wartości jest zbyt duży):

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

Ale znowu: dlaczego masz wartość całkowitą (tj "liczba całkowita") w zmiennej double w pierwszej kolejności?

+1

Powód jest to, że dwukrotnie Im pracy z bazą danych, która traktuje wszystkie kolumny numeryczne podwójnej. – Mizipzor

+1

W przypadku rzutowania podwójnego na długi, czasami wartość zmienia się. Na przykład: '((long) ((double) 25891000000002001L))' staje się '25891000000002000L' – Vigneshwaran

1

Jeśli są przechowywane jest ID (czyli coś używany jedynie do identyfikacji innego podmiotu, którego rzeczywista wartość numeryczna nie ma znaczenia), to nie powinno być stosowanie podwójnych do przechowywania to. Precyzja prawie na pewno Cię zepsuje.

Jeśli twoja baza danych nie pozwala na wartości całkowite, powinieneś przechowywać identyfikatory jako łańcuchy. Jeśli to konieczne, przekształć ciąg znaków w ciąg liczb całkowitych, których chcesz użyć. Przy odpowiednim użyciu zer wiodących możesz uczynić kolejność alfabetyczną ciągu tak samo jak kolejność liczbowa wzorca.

To powinno pomóc w rozwiązaniu problemu.

+0

Niestety, zarówno baza danych, jak i jej typy danych są ustawione. Kolumna, którą mam obsłużyć, jest podwójna i nic nie mogę na to poradzić. Kiedy czytam bazę danych, oczywiście szybko przekształcam ją w int do użytku wewnętrznego (lub ciąg, który sugerujesz). To naprawdę nie ma znaczenia, ponieważ problem jest rzeczywistą konwersją, ponieważ nie mogę zmienić zawartości lub układu bazy danych. – Mizipzor

-3
double d = 56789; 
    String s = d+""; 
+1

Czy to połączenie Double.toString (d)? Co domyślnie, jeśli się nie mylę, dodaje zarówno notację naukową, jak i separatory tysięcy (jeśli to konieczne). – Mizipzor

2

Również można użyć

double value = getValue(); 

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

String strVal = f.format(value); 
0

Co o Long.toString (() wartość długości)?