大家好,我正在对我的货币字段进行单元测试,我发现这个问题可以被视为一个错误。
<xforms:bind id="amount" nodeset="instance('form')/data/amount"
constraint="if(.!='') then number(.) >0 and string-length(.)<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
任何人都可以提出更好的方法或如何解决上述问题。