Bonjour.
J'ai à nouveau une petite question rapide.
Je me fait toujours les dents sur des données issues de sites de poker, pour jouer un peu avec xslt.
voilà mon problème particulier :
les données sont écrites dans un fichier xml, qui ressemble à :
Je réalise une somme des attributs "sum" sur toutes les actions dont l'attribut "no" est inférieur à une valeur données. (la valeur du pot quoi)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <round no="1"> <action no="4" player="raumfahrerr" type="4" sum="$0"/> <action no="10" player="raumfahrerr" type="3" sum="$0.04"/> <action no="5" player="Kertim" type="0" sum="$0"/> <action no="6" player="tbvletbvletbvle" type="0" sum="$0"/> <action no="7" player="Karnouk" type="3" sum="$0.02"/> <action no="11" player="Karnouk" type="0" sum="$0"/> <action no="8" player="cococa80" type="6" sum="$0.03"/> <action no="12" player="cococa80" type="3" sum="$0.02"/> </round>
Ma fonction de somme est un véritable plagiat de la fonction définie ici :
http://xml.developpez.com/sources/?page=calcul
La différence c'est que mon attribut "sum", c'est un nombre qui est à chaque fois précédé du symbole "$".
Donc je me suis dit que j'allais décapiter le string "sum" de son premier caractère, le convertir en nombre, l'ajouter à mon sous total suivant.
Voilà mon un bout de xslt que j'utilise pour débugger ma fonction de somme :
$ActionNodes c'est une liste de noeuds "action" qu'il me reste à traiter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ****<br/> ++ action <xsl:value-of select="$ActionNodes[1]/@no"/><br/> ++ adding <xsl:value-of select="number(substring($ActionNodes[1]/@sum,2,string-length($ActionNodes[1]/@sum)))"/><br/> ++ to pot <xsl:value-of select="$pot_total"/><br/> ++ makes <xsl:value-of select="$pot_total+(number(substring($ActionNodes[1]/@sum,2,string-length($ActionNodes[1]/@sum))))"/><br/> ****<br/>
J'ajoute la somme du premier élément de cette liste à ma somme courante.
J'affiche ma nouvelle somme courante.
Et là j'obtiens parfois des sorties bizarres du style :
donc 0.02 + 0.18 = 0.19999999999999998 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 **** ++ action 12 ++ adding 0.02 ++ to pot 0.18 ++ makes 0.19999999999999998 ****
Partager