Donc c'est bien un problème d'affichage et tu devras le formater en String !
C'est quoi ce tableau ? Une JTable ? Un composant Swing/AWT/SWT ? Un tableau HTML ? Autre chose ???
a++
Donc c'est bien un problème d'affichage et tu devras le formater en String !
C'est quoi ce tableau ? Une JTable ? Un composant Swing/AWT/SWT ? Un tableau HTML ? Autre chose ???
a++
Ben en fait, l'affichage de n'importe quel élément d'un type quelconque passe nécessairement par une conversion en String que ce soit dans une page jsp, dans la console ou dans un fichier.
Le type double ne comporte aucune information sur son format, c'est simplement une donnée brute représentant un nombre flottant, l'affichage n'en sera qu'une représentation sous la forme d'une chaine de caractère.
Ainsi, adiGuba t'as montré une manière de conformer l'affichage de ta variable double à tes attentes (ce qu'il appelle le formatage en String).
Pour les calculs, tu utilise tes variables doubles.
Comme le nom du FAQ Comment convertir un nombre en chaîne formatée ? le dit, on crée une chaine formatée, donc String.
Une question:
As tu tenu compte de ma remarque
Chez moi au Mexique il me faut un point décimal , mais chez toi il te faut sans doute une virgule, donc ne pas remplacer la , en .
Code : Sélectionner tout - Visualiser dans une fenêtre à part str = str.replaceAll(",", "."); // eventuellement
Le message d'erreur signifiant qu'il y a un caractère non numérique (le point)
Iimmédiatement après
str est avec un . ou une , ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part String str = df.format(mon_double);
Dan
C'est pourtant bien lorsque tu écris le double ans la JSP que tu dois le formater !
1.0, 1.00, 1.000, 1.0000 etc sont les mêmes nombres et sont codé de la même manière en mémoire. La différenciation se fait seulement lors de l'affichage. Le formatage par défaut n'est pas contrôlable et peut même donner des résultats non-souhaité (comme l'écriture scientifique qui fait que 10000000.00 devient 1.0E7)
Cela veut simplement dire que tu va donner une représentation sous forme d'une chaine de caractères ... comme je l'ait indiqué dans ma toute première réponse...
Il faudrait plutôt utiliser la méthode parse() du NumberFormat pour avoir le même comportement, mais comme je l'ai dit ce n'est pas une solution car le format exact n'est pas garantie...
a++
Oui j'ai fais ça comme suit :
Mais j'ai toujours le meme message d'erreur ,je comprend pas ce qui cloche la dessus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Double.parseDouble(df.format(testm.somme(annee ,"jav")/55.0).replaceAll(",", "."))
J'ai vu cependant quelques part que strurs est derrière de tels erreurs et qu'il faut parser les chaines autrement ! Et j'utilise struts pour mon affichage .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 java.lang.NumberFormatException: For input string: "0,00" sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) java.lang.Double.parseDouble(Unknown Source)
Salut,
Et sans cette ligne éventuelle
Il ne faut peut-être pas la mettre dans ton cas et garder la ","
Code : Sélectionner tout - Visualiser dans une fenêtre à part str = str.replaceAll(",", "."); // eventuellement
Dan
Ca fait du bien de se sentir écouté !
Je reformule une dernière fois ma question : comment tu affiches tes valeurs dans ta page JSP ????? Un bout de code ne serait pas inutile...
a++
Excuse moi adiGuba ,j'ai lu plusieurs fois ton post ,mais je n'arrive pas à en tirer profis ,d'ailleurs j'ai toujours la meme erreur .
Voila comment j'affiche mon tab dans ma jsp (c'est un peut compliqué parcequ'il y a beaucoup de choses dérrières )
code :
C'est un tableau que j'alimente par une liste à travères une action struts .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <td width="8"><nested:write property="jav" /></td> <td width="8"><nested:write property="fev" /></td> <td width="8"><nested:write property="mars" /></td> <td width="8"><nested:write property="avril" /></td> <td width="8"><nested:write property="mai" /></td> <td width="8"><nested:write property="juin" /></td> <td width="8"><nested:write property="juil" /></td> <td width="8"><nested:write property="aout" /></td> <td width="8"><nested:write property="sep" /></td> <td width="8"><nested:write property="oct" /></td> <td width="8"><nested:write property="nov" /></td> <td width="8"><nested:write property="dec" /></td>
Cette liste est modifiée via une classe et c'est là ou j'utilise le formatage .
code de la classe :
J'èspere qu'avec ça vous pourrriez mieux voir comment j'affiche mon tableau .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static ArrayList<Finance> chargerList(Integer annee,String typ){ ArrayList<Finance> financeList = new ArrayList<Finance>() ; Finance finance1=new Finance(); Finance finance2=new Finance(); DecimalFormat df = new DecimalFormat("0.00"); finance2.setJav(Double.parseDouble(df.format(testm.somme(annee, typ, "jav")/22.0).replaceAll(",", "."))); .....
Enfin !
Donc comme je l'ai dit tu supprimes ces conversions double->String->double qui ne servent à rien :
Et ensuite tu spécifies le formatage à l'affichage. La seule différence avec ma première réponse vient du fait que tu utilises Struts pour le formattage. C'est vers elle et sa doc qu'il faut donc se tourner ! Et on voit que le tag gère lui-même le DecimalFormat via la propriété format :
Code : Sélectionner tout - Visualiser dans une fenêtre à part finance2.setJav(testm.somme(annee, typ, "jav")/22.0);
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <td width="8"><nested:write property="jav" format="#.00"/></td>
Tu peux également spécifier la locale pour forcer l'affichage de ton choix (en français tu auras des virgule, en anglais des points...) :
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <td width="8"><nested:write property="jav" format="#.00" locale="en_US"/></td>
a++
PS : Je n'ai pas testé car je n'ai pas l'environnement qu'il faut, mais la solution est dans le tag <nested:write>![]()
Effectivement une solution simple ,qu'on aurais vite trouvé si j'avais poster la partie jsp , mais je me suis focalisé sur la partrie traitement javaEnfin !.
Merci encore une fois adiGuba ,une dérnière remarque quand j'utilse le #.00 j'ai un truc du genre ,18 alors que moi je veux afficher le 0,18 .
Donc jutilise le formate 0,00 .Cependant quand j'auaris à afficher un nombre comme 1,453456 est ce que j'aurais 1,45 ou 0,45 avec le formate 0,00 ?
Oui en effet je me suis focalisé sur les deux chiffres après la virgule. Après tu peux adapté plus précisément selon tes besoins
Tu conserveras bien deux chiffres après la virgule.
Dans le format un 0 représente un caractère obligatoire qui sera affiché même s'il représente un zéro inutile.
Les # représentes des caractères optionnels, qui ne seront affiché que si cela correspond à un valeur utile...
Donc 0.00 est le bon format pour obtenir une valeur tel que 0,00 (en français).
Maintenant tu pourrais peut-être utilisé les séparateurs de milliers avec le format suivant : #,##0.00
Ce qui donnera pour 1234567890.123456 l'affichage suivant en français : 1 234 567 890,12
a++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager