こんにちは、通貨フィールドの単体テストを行っていたところ、バグと見なすことができるこの問題が見つかりました。
<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 として「false」を返します。通貨額は四捨五入されます。
私の制約チェックは失敗します。しかし、フィールドをクリックしてフィールドの外側をクリックすると、制約チェックは true を返します
誰かがそれを行うためのより良い方法や上記の問題を解決する方法を提案できますか?