xforms:decimal只显示一个精度值

时间:2012-03-15 13:12:05

标签: orbeon xforms

我有一个简单的问题。我正在计算修订列表中的最新版本。

        <xforms:instance id="history">
            <metaData>
                <latestVersion></latestVersion>
                <History>
                    <Revision>
                        <Date>01/02/2011</Date>
                        <Comments>Mino Issues Fixed</Comments>
                        <Version>0.4</Version>
                    </Revision>
                    <Revision>
                        <Date>17/02/2011</Date>
                        <Comments>Minor issues fixed</Comments>
                        <Version>2.1</Version>
                    </Revision>
                    <Revision>
                        <Date>22/03/2011</Date>
                        <Comments>Cosmetic Defects Fixed</Comments>
                        <Version>2.2</Version>
                    </Revision>
                    <Revision>
                        <Date>06/04/2011</Date>
                        <Comments>minor issues fixed</Comments>
                        <Version>2.3</Version>
                    </Revision>
                    <Revision>
                        <Date>20/04/2011</Date>
                        <Comments>minor issues fixed</Comments>
                        <Version>2.4</Version>
                    </Revision>
                    <Revision>
                        <Date>22/04/2011</Date>
                        <Comments>Small build</Comments>
                        <Version>3.0</Version>
                    </Revision>
                </History>
            </metaData>
        </xforms:instance>

        <xforms:bind nodeset="instance('history')/latestVersion" 
            type="xforms:decimal"
            calculate="max(instance('history')/History/Revision/Version/number())" />

当我输出latestVersion时,它显示为3.00。如果我删除绑定定义中的type,则会显示为3。如何将其显示为3.0

2 个答案:

答案 0 :(得分:4)

有三件事需要考虑:

  • 您使用的是哪种类型的值
  • 存储在latestVersion中的值的格式是
  • 如何格式化呈现给用户的值

首先,由于您的版本号是小数,因此您应始终将它们视为小数。因此,您不应使用number()函数,该函数始终返回xs:double。您应该将表达式重写为:

max(instance('history')/History/Revision/Version/xs:decimal(.))

其次,执行此操作时,存储在latestVersion中的值将保证为xs:decimal格式。在这里,它将是3

第三,您如何向用户展示该价值?您必须确保其格式正确。如果你写:

<xforms:output ref="latestVersion"/>

xforms:output查看值的类型,注意它是decimal类型,并根据十进制类型的默认格式对其进行格式化,请参阅properties-xforms.xml

十进制类型的默认格式为:

format-number(xs:decimal(.),'###,###,###,##0.00')

如果你想要一个十进制格式,你可以覆盖properties-local.xml中的属性,或使用像@grtjn建议的那样:

<xforms:output value="format-number(instance('history')/latestVersion, '#.0')"/>

或者:

<xforms:output value="format-number(instance('history')/latestVersion, '#,###.0')"/>

答案 1 :(得分:1)

您可以使用<xforms:output>使用value属性而不是refbind来调整演示文稿。该属性的值是一个表达式,可能包含对format-number()的调用。例如:

<xforms:output value="format-number(instance('history')/latestVersion, '#.0')"/>

注意:对格式编号的支持可能取决于实现,但我认为Orbeon支持它。