2017-04-11 1 views
-3

Lorsque j'essaie de convertir une chaîne en BigDecimal à l'aide de BigDecimal(), les chaînes comme '45e57' sont converties en version 4.5E + 57.Conversion de chaîne en BigDecimal lorsque la chaîne contient un 'e' Java

// on suppose que « texte » pour être une entrée

BigDecimal textToBigDecimal = null; 
try 
{ 
    if (!textToBigDecimal.contains("e") && !textToBigDecimal.contains("E")) 
    { 
     textToBigDecimal = new BigDecimal(text); 
    } 
} 
catch (NumberFormatException ignored) 
{ 
} 

A partir de maintenant je lance erreur si « texte » contient « e ». Je me demande s'il y a une solution de contournement pour passer la vérification. Nécessité de convertir uniquement les chaînes avec des nombres, si d'autres caractères sont présents dans la chaîne, la conversion ne doit pas avoir lieu.

+2

Je ne pouvais pas comprendre, quel est le problème? Pouvez-vous s'il vous plaît partager votre code et la trace complète de toutes les exceptions que vous obtenez? – BackSlash

+1

On ne sait pas ce que vous demandez - en particulier, par "Mais je ne lèverai pas d'exception" voulez-vous dire que vous * voulez * lancer une exception, ou vous voulez qu'une exception * pas * soit levée? Un [mcve] rendrait beaucoup plus facile de vous aider. –

+0

'new BigDecimal (" 45e57 ")' sera converti en '4.5E + 58' ce qui est correct! Que voulez-vous empêcher? Que réaliser? – Harmlezz

Répondre

0

Si vous souhaitez qu'une exception soit levée pour des chaînes telles que '45e57', vous pouvez utiliser par exemple Long.parseLong("43e57") avant de construire BigDecimal. Il va lancer NumberFormatException

+1

Pourquoi un try-catch si vous pouvez juste vérifier s'il y a un 'e' dans la chaîne donnée? – BackSlash

+0

Nous ne savons pas si ces valeurs de chaîne contiennent quelque chose d'autre sauf 'e'. Mais la question nécessite une description beaucoup plus détaillée: quel type de valeurs de chaîne nous avons etc – Lennier

+0

Vrai, mais pour tout le reste, 'BigDecimal' renvoie une exception elle-même. La seule différence entre 'long' et' BigDecimal' est que 'long' n'accepte pas' E' alors que 'BigDecimal' le fait, donc dans ce cas vérifier que le' E' est correct. – BackSlash