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 à :

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>
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)
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 :

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/>
$ActionNodes c'est une liste de noeuds "action" qu'il me reste à traiter.
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 :

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
****
donc 0.02 + 0.18 = 0.19999999999999998 ?