J'essaie de lire certaines valeurs BigDecimal de la chaîne. Disons que j'ai cette chaîne: "1,000,000,000.999999999999999" et que je veux en tirer un BigDecimal. Quelle est la manière de procéder?
Tout d'abord, je n'aime pas les solutions utilisant des remplacements de chaînes (en remplaçant des virgules, etc.). Je pense qu'il devrait y avoir un formateur soigné pour faire ce travail à ma place.
J'ai trouvé une classe DecimalFormatter, mais comme elle fonctionne à travers le double, d'énormes quantités de précision sont perdues.
Alors, comment puis-je le faire?
java
parsing
bigdecimal
bezmax
la source
la source
BigDecimal
.Réponses:
Vérifiez
setParseBigDecimal
dans DecimalFormat. Avec ce setter,parse
retournera un BigDecimal pour vous.la source
Code complet pour prouver que non
NumberFormatException
est jeté:Production
la source
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
au lieu d'une virgule, pas besoin de paniquer à propos des différents paramètres régionaux.L'exemple de code suivant fonctionne bien (les paramètres régionaux doivent être obtenus dynamiquement)
la source
Le code pourrait être plus propre, mais cela semble faire l'affaire pour différents paramètres régionaux.
la source
Voici comment je le ferais:
Évidemment, si cela se passait dans le code de production, ce ne serait pas aussi simple.
Je ne vois aucun problème à supprimer simplement les virgules de la chaîne.
la source
J'avais besoin d'une solution pour convertir une chaîne en BigDecimal sans connaître les paramètres régionaux et être indépendant des paramètres régionaux. Je n'ai pas trouvé de solution standard à ce problème, j'ai donc écrit ma propre méthode d'aide. Peut-être que cela aide aussi quelqu'un d'autre:
Mise à jour: Attention! Cette méthode d'assistance ne fonctionne que pour les nombres décimaux, donc les nombres qui ont toujours un point décimal! Sinon, la méthode d'assistance pourrait donner un résultat erroné pour les nombres compris entre 1000 et 999999 (plus / moins). Merci à bezmax pour sa grande contribution!
Bien sûr, j'ai testé la méthode:
la source
7,333
représente? Est-ce 7333 ou 7 et 1/3 (7,333)? Dans différents paramètres régionaux, ce nombre serait analysé différemment. Voici la preuve de concept: ideone.com/Ue9rT8supprimera tous les caractères sauf les chiffres et le point de votre chaîne.
Pour le rendre compatible avec les paramètres régionaux, vous pouvez utiliser
getDecimalSeparator()
fromjava.text.DecimalFormatSymbols
. Je ne connais pas Java, mais cela pourrait ressembler à ceci:la source
Ancien sujet mais peut-être le plus simple est d'utiliser Apache commons NumberUtils qui a une méthode createBigDecimal (String value) ....
J'imagine (j'espère) que cela prend en compte les paramètres régionaux sinon ce serait plutôt inutile.
la source
S'il vous plaît essayez cela, cela fonctionne pour moi
la source