【问题标题】:Casting an Integer to a Double in XPath 1.0在 XPath 1.0 中将整数转换为双精度
【发布时间】:2010-01-13 11:30:57
【问题描述】:

我目前正在构建一个基于 XML 的 Jasper 报告,我试图在其中将税收百分比添加到成本中。

当我使用sum(//net-total) 来计算总成本时出现问题。当总和没有小数位时,它返回整数,我需要一个双精度数。

我尝试了sum(//net-total) * 1.0,但它似乎不起作用。

有人有什么想法吗?

如果我采取了错误的方法,请随时纠正我。

【问题讨论】:

    标签: java xml xpath casting jasper-reports


    【解决方案1】:

    问题在于,根据(XML)的定义,double 必须有小数点 (.)

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

    你应该看看XSLT format-number() Function ..

    例如format-number(sum(//net-total), "#.00") 将强制使用两位十进制数字表示..

    [编辑]

    由于您希望它用于 XPATH 1,不幸的是它不支持条件表达式也不支持字符串格式,因此不可能在一个单一的 xpath 表达式中做到这一点......

    但是,如果您可以使用//net-total 的总和创建一个节点(总和),那么您可以使用一些解决方法

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

    如果没有 .00 将添加 .00。在节点值..

    【讨论】:

    • 我尝试使用 format-number 函数,但不幸的是它在 XPath 1.0 中不存在。
    • 勾选答案,因为它也解决了问题。我也在考虑这种方法。
    【解决方案2】:

    找到了如何在 IReport 中设置 Object 返回类型并在对象上强制执行模式。现在工作正常。

    【讨论】:

    • 很高兴你明白了......只是为了好玩,我在上面的答案中发布了一个小技巧(有一个小要求)
    猜你喜欢
    • 2016-01-01
    • 2013-05-13
    • 2014-04-18
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多