2009-10-27 4 views
29

J'ai le numéro 654987. C'est un identifiant dans une base de données. Je veux le convertir en une chaîne. Le Double.ToString (valeur) normal le fait sous forme scientifique, 6.54987E5. Quelque chose que je ne veux pas.Conversion Java Double to String sans formatage

Autres fonctions de formatage Ive found vérifie les paramètres régionaux actuels et ajoute des séparateurs de milliers appropriés et autres. Depuis son ID, je ne peux pas accepter tout formatage du tout.

Comment le faire? [Edit] Pour clarifier: Je travaille sur une base de données spéciale qui traite toutes les colonnes numériques comme des doubles. Double est le seul type (numérique) que je peux extraire de la base de données.

+3

Voir la réponse haut dans, http://stackoverflow.com/questions/47045/sprintf-equivalent-in-java répond à la même question. –

+1

654987 est un nombre entier, pas un double. Vouliez-vous dire autre chose? – Kai

+0

vérifiez ceci: http: // stackoverflow.com/questions/1521122/java-converting-a-double-to-a-string/1521324 # 1521324 – JuanZe

Répondre

20

utilisation longue:

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

S'il s'agit d'un ID entier dans la base de données, utilisez plutôt un entier. Ensuite, il sera formaté en entier.

+0

Dans un monde parfait, bien sûr, mais la raison de la question est que je suis en train d'essayer de contourner les limites de la base de données; le seul type (numérique) qu'il peut stocker est un double. – Mizipzor

2

Qu'en est-:

Long.toString(value) 

ou

new String(value) 
+4

S'il vous plaît ne pas suggérer '" "+ value'! C'est un hack et ne transmet pas l'intention de quelque façon que ce soit. Je dirais que c'est un mauvais style à tout le moins. –

+0

Ok :) Remplacé cela avec "new String (value)". –

+0

new String (value) aura le même problème que la question mentionne, si value est un 'double'. –

6

Que diriez-vous String.valueOf((long)value);

32

Utilisez un fixe NumberFormat (spécifiquement un DecimalFormat):

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

Vous pourrez aussi simplement à int jeté (ou long si la plage de valeurs trop grande):

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

Mais là encore: pourquoi avez-vous une valeur entière (à savoir un "entier" nombre) dans une variable double en premier lieu?

+1

Raison du double est que je travaille avec une base de données qui traite toutes les colonnes numériques comme des doubles. – Mizipzor

+1

Si vous lancez double à long, la valeur change parfois. Par exemple: '((long) ((double) 25891000000002001L))' devient '25891000000002000L' – Vigneshwaran

1

Si ce que vous stockez est un identifiant (par exemple quelque chose utilisé uniquement pour identifier une autre entité, dont la valeur numérique réelle n'a pas de signification), alors vous ne devriez pas utiliser Double pour stocker il. La précision va presque certainement vous visser.

Si votre base de données ne permet pas de valeurs entières alors vous devriez stockées ID sous forme de chaînes. Si nécessaire, faites de la chaîne la représentation sous forme de chaîne de l'entier que vous voulez utiliser. Avec l'utilisation appropriée des principaux zéros, vous pouvez faire l'ordre alphabétique de la chaîne même que l'ordre numérique des ints.

Cela devrait vous contourner la question.

+0

Malheureusement, la base de données et ses types de données sont définis. La colonne que je dois gérer est un double et il n'y a rien que je puisse faire à ce sujet. Lorsque la base de données est lue, je la convertis rapidement en un int pour usage interne (ou une chaîne comme vous le suggérez). Cela n'a pas vraiment d'importance puisque le problème est la conversion réelle, car je ne peux pas changer le contenu ou la disposition de la base de données. – Mizipzor

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

Est-ce que cela n'appelle pas Double.toString (d)? Par défaut, si je ne me trompe pas, ajoute à la fois la notation scientifique et les séparateurs de milliers (si nécessaire). – Mizipzor

2

Vous pouvez également utiliser

double value = getValue(); 

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

String strVal = f.format(value); 
0

Qu'en est-(valeur (long)) Long.toString?