|
|
|
| /* Edition Française */ |
| « Rejeter l'injection (T) | Qui div mieux? (T) » |
Alexandre nous fait le plaisir de partager avec nous le premier WTF Français. Alexandre travaille dans une grande société d'assurance française. En poste depuis 6 mois, il a hérité du système de gestion des devis. C'est un client riche Java basé sur le framework de présentation Struts.
Récemment Alexandre reçoit un appel d'un commercial lui expliquant qu’il remarque une légère différence de décimales dans le calcul d'un devis : A partir d'un prix exact de 49.684998, le système retournait un prix arrondi de 49,684 au lieu de 49,685.
Après qu'Alexandre leur ait fait remarquer que le problème devait exister depuis deux ans puisque cette partie du logiciel n'avait pas été modifiée, il décida de regarder de plus près la cause du problème.
En fouillant dans le code, il trouva une méthode qui était appelée systématiquement lors du calcul du devis, la méthode "arrondi":
String nombreString = String.valueOf(nombre);
StringTokenizer tokenizer = new StringTokenizer(nombreString, ".");
if (tokenizer.countTokens() == 2) {
String partieEntiere = tokenizer.nextToken();
String partieDecimale = tokenizer.nextToken();
if (partieDecimale.length() > 2) {
int dixieme = Integer.parseInt(partieDecimale.substring(0, 1));
int centieme = Integer.parseInt(partieDecimale.substring(1, 2));
int millieme = Integer.parseInt(partieDecimale.substring(2, 3));
if (millieme >= 5) {
centieme = centieme + 1;
if (centieme > 9) {
centieme = 0;
dixieme = dixieme + 1;
if (dixieme > 9) {
dixieme = 0;
partieEntiere = Integer.toString(Integer.parseInt(partieEntiere) + 1);
partieDecimale = Integer.toString(dixieme)+ Integer.toString(centieme);
nombreString = partieEntiere + "." + partieDecimale;
Alors que sa dernière release était en recette depuis une semaine, c'est un bug datant de deux ans qui l'oblige à retester manuellement le calcul des quelques 5500 combinaisons de produits d'assurance. Le projet n'incluant évidemment pas de tests unitaires.
| Alexandre, notre premier contributeur français gagne le sticker du Daily WTF ! Pour vous aussi avoir votre sticker collector envoyez nous vos WTF. | ![]() |
| « Rejeter l'injection (T) | Qui div mieux? (T) » |