2017-06-19 3 views
0

J'ai passé beaucoup de temps maintenant, en essayant de convertir le numéro 1.2846202978398e + 19 en Java, sans aucune chance. Actuellement, ce que j'essaie de faire (long)Double.parseDouble(hashes), mais cela donne 9223372036854775807, ce qui est évidemment incorrect. Le numéro actuel doit ressembler à ceci: 12855103593745000000.Conversion grand nombre scientifique à long

L'utilisation de int val = new BigDecimal(stringValue).intValue(); renvoie -134589568 car il ne peut pas contenir le résultat. Passer le code à long val = new BigDecimal(hashes).longValue(); me donne -5600541095311551616 qui est également incorrect.

Je suppose que cela se produit en raison de la taille d'un double par rapport à un long.

Des idées?

+0

BigDecimal ?? biginteger ?? –

+0

Copie possible de [Java: Convertir la notation scientifique en int normal] (https://stackoverflow.com/questions/2546147/java-convert-scientific-notation-to-regular-int) –

+0

Question mise à jour pour refléter vos commentaires :) – Jazerix

Répondre

1

Avez-vous essayez d'utiliser String.format:

String result = String.format("%.0f", Double.parseDouble("1.2846202978398e+19")); 
System.out.println(result); 

Sortie

12846202978398000000 

Modifier

Pourquoi vous ne travaillez pas avec BigDecimal à d o les opérations arithmétiques, par exemple:

String str = "1.2846202978398e+19"; 
BigDecimal d = new BigDecimal(str).multiply(BigDecimal.TEN); 
//         ^^^^^^^^------example of arithmetic operations 


System.out.println(String.format("%.0f", d)); 
System.out.println(String.format("%.0f", Double.parseDouble(str))); 

sortie

128462029783980000000 
12846202978398000000 
+0

Ça marche! Mais cette solution m'empêche de faire des opérations arithmétiques ^^ – Jazerix

+0

@Jazerix pourquoi vous ne travaillez pas avec 'BigDecimal' et le résultat le montre comme je le fais? –

+0

@Jazerix vérifier mon édition –

2

Votre valeur est supérieure à la taille maximale de long. Vous ne pouvez pas utiliser long dans cette situation. Essayez

BigDecimal value = new BigDecimal("1.2846202978398e+19"); 

Après cela, vous pouvez appeler

value.toBigInteger() 

ou

value.toBigIntegerExact() 

si nécessaire.

0

Qu'en est-:

System.out.println(new BigDecimal("1.2846202978398e+19").toBigInteger());