2010-01-13 3 views
1

Je suis en train de construire un rapport Jasper basé sur XML dans lequel j'essaye d'ajouter un pourcentage de taxe sur le coût.Coulée d'un entier en double dans XPath 1.0

Un problème se produit lorsque j'utilise sum(//net-total) pour calculer le coût total. Lorsque le total additionné n'a pas de décimales, il retourne Integer et j'ai besoin d'un double. J'ai essayé sum(//net-total) * 1.0 mais cela ne semble pas fonctionner.

Quelqu'un a-t-il des idées?

N'hésitez pas à me corriger si je me trompe.

Répondre

1

Le problème est que, par définition, (XML) un double doit avoir un point décimal (.)

[http://www.w3.org/TR/xmlschema-2/#double]

Vous devriez jeter un oeil à la XSLT format-number() Function ..

pour exemple format-number(sum(//net-total), "#.00") imposerait une représentation à deux chiffres décimaux ..

[EDIT]

Puisque vous voulez pour XPATH 1, qui malheureusement ne supporte pas les expressions conditionnelles, ni la mise en forme de chaîne, il est impossible de le faire dans une expression XPath signle ...

si toutefois vous pouvez créer un noeud (somme -Total) avec la somme des // total net que vous pouvez ensuite utiliser une petite solution

concat(
//sum-total, 
substring(concat(//sum-total,".00"), 1, number(not(contains(//sum-total,".")))*1000 ) 
) 

qui ajoutera .00 s'il n'y a pas. dans la valeur de nœud.

+0

J'ai essayé d'utiliser la fonction format-numéro mais elle n'existe malheureusement pas dans XPath 1.0. – Gordon

+0

Réponse cochée car elle résout également le problème. Je pensais à cette approche aussi. – Gordon

1

A trouvé comment définir le type de retour d'objet dans IReport et appliquer un modèle sur l'objet. Fonctionne bien maintenant.

+0

content que vous l'ayez compris ... juste pour le plaisir que j'ai posté dans ma réponse ci-dessus un petit truc pour le faire (avec une petite exigence) –