0

大家好,我正在对我的货币字段进行单元测试,我发现这个问题可以被视为一个错误。

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

在上述情况下,我试图达到的条件是,将最大值检查 <"9999999,999999999.99" 这总共有 19 个字符。(我曾尝试过 constraint="if(.='') then true() else number(.)<10000000000000000" 而不是长度检查,但后来看到该数字检查中的一些错误切换到此字符串长度检查)

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

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

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

4

1 回答 1

0

需要注意的几点:

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

数字作为双精度 64 位浮点类型与其他数字进行评估。在评估数字时要考虑到这一点。基本上,这意味着大量数字被四舍五入。您在大量评估中遇到的问题可能不是错误,而只是数学问题。

  • 例如,9999999999999998976.00 和 10000000000000001023.99 之间的数字都计算为 1.0E19
于 2011-04-12T18:03:27.807 回答