四舍五入之前完成货币字段约束检查

时间:2011-04-12 06:17:00

标签: xforms orbeon

全部 我是单位测试我的货币字段,我发现这个问题可以被视为一个错误。

<xforms:bind id="amount" nodeset="instance('form')/data/amount"
constraint="if(.!='') then number(.) >0 and string-length(.)&lt;20 else ."/>
...
<fr:currency bind="amount" xxforms:maxlength="50" incremental="true">
   <xforms:alert>Value should be below $ 9,999,999,999,999,999,999.99</xforms:alert>
</fr:currency>

我试图在上述情况下实现的条件是,进行最大值检查&lt; “9999999,999999999.99”这个共有19个字符。 (我曾试过约束=“if(。='')然后是真()其他数字(。)&lt; 10000000000000000”而不是长度检查,但后来看到该数字检查中的一些错误切换到此字符串长度检查)

现在这个字符串长度的问题是 如果我输入“9,999,999,999,999,999.991”,则会发生以下情况 1.执行约束检查。返回'false'为“9999999999999999.991”= 20长度 2.货币金额四舍五入。

所以我的约束检查失败了。但是,如果我单击该字段并在字段外单击,则约束检查将返回true

任何人都可以建议更好的方法或如何解决上述问题。

1 个答案:

答案 0 :(得分:0)

有几点需要注意:

xxforms:maxlength不适用于fr:currency或任何其他fr:控件

将数字作为double-precision 64-bit floating point type与其他数字进行评估。在评估数字时考虑到这一点。基本上这意味着大数字变得圆润。您可能遇到的大量评估问题不是错误,而是数学问题。

  • 例如,9999999999999998976.00和10000000000000001023.99之间的数字都评估为1.0E19