Utilisation de Java BigDecimal pour un chiffre de précision de 15 (échelle de 2)


J'ai trouvé une réponse partielle ici, mais je le savais déjà. J'ai donc décidé de poster une nouvelle question.

J'essaie de convertir une chaîne de paramètre de requête HTTP en un nombre BigDecimal Java de précision 15 (avec une mise à l'échelle de 2). Par exemple,

String x = request.getParameter("seqNo"); /* e.g. 12345678910111213141516.17181920 whatever */
// I want to convert x so that it has a precision of 15 and scale of 2 i.e. 111213141516.17.

Je ne me soucie pas d'arrondir. C'est une forme de numéro de référence, donc sans importance d'arrondissement. Je sais que la mise à l'échelle peut être définie en utilisant la méthode surchargée setScale(int) qui retournera une mise à l'échelle(tronquée?) BigDécimal. Mais comment pour vous assurer que la précision est réglée correctement?

Author: Community, 2015-04-30

1 answers

Que diriez-vous d'utiliser la sous-chaîne à la place? Ce n'est pas vraiment un numéro de toute façon.

int pos = x.indexOf('.');
String y = x.substring(pos - 12, pos + 3);

Si vous êtes vraiment assez fou pour essayer de traiter cela comme des nombres (les collisions et les différences d'arrondi vont vous casser le cou tôt ou tard!), vous pourriez le faire.

double v = Double.parseDouble(y); // REALLY REALLY REALLY NOT RECOMMENDED.

, Mais il est un très très mauvaise idée. Ne pas presser quelque chose dans une colonne de nombres qui est pas un nombre. La semaine prochaine, vous obtiendrez des chiffres avec deux points, et il se brisera de toutes les manières possibles.

Si vous n'avez pas besoin de faire calculs mathématiques, traitant d'un domaine tel que VARCHAR ou TEXT est parfaitement acceptable. Parce que c'est ce qu'elle est: une séquence de caractères. Pas un nombre.

En fait, je vous conseille de stocker le nombre entier, comme VARCHAR. C'est un identifiant unique, pas un nombre mathématique pour faire des calculs avec.

 1
Author: Has QUIT--Anony-Mousse, 2015-04-30 15:26:51