2017-03-08 6 views
4

いくつかの入力フィールドの値を集計して100に等しいことを確認するために、Coldfusionのルールを使用しています。 これは整数でも機能しますが、10進数を入力するとルールが発生します。合計値は100です。メッセージ文字列に合計値を挿入すると、「これらの値は100%になり、現在の合計は100です」という警告が表示されます。 80、18、1.5、0.1、0.1、および0.3ColdFusionで数値データを使用する数値計算

スクリーンショット:何 enter image description here

わからないここでルールのコード、そしてまた私が入力したときの結果を示すスクリーンショットであります問題は...

<!--- Tabulate race ---> 
    <cfif isNumeric(form.whitePct)> 
     <cfset race += #form.whitePct#> 
    </cfif> 
    <cfif isNumeric(form.blackPct)> 
     <cfset race += #form.blackPct#> 
    </cfif> 
    <cfif isNumeric(form.asianPct)> 
     <cfset race += #form.asianPct#> 
    </cfif> 
    <cfif isNumeric(form.paciPct)> 
     <cfset race += #form.paciPct#> 
    </cfif> 
    <cfif isNumeric(form.amerIndPct)> 
     <cfset race += #form.amerIndPct#> 
    </cfif> 
    <cfif isNumeric(form.othPct)> 
     <cfset race += #form.othPct#> 
    </cfif> 

    <!--- Q60 - Numbers for this question should total 100% ---> 
    <cfif race neq '100'> 
     <cfset queryAddRow(queryLog)> 
     <cfset querySetCell(queryLog,"ruleField","whitePct")> 
     <cfset querySetCell(queryLog,"ruleMessage","Q60 - Numbers for this question should total 100%, current total is #race#")> 
     <cfset querySetCell(queryLog,"ruleGUID","A5DC7FDD-6624-4B0F-A99B-2589B8CBC07D")> 
     <cfset querySetCell(queryLog,"ruleType","soft warning")> 
     <cfset querySetCell(queryLog,"ruleCategory","RANGE")> 
     <cfset querySetCell(queryLog,"ruleOrder","410")> 
     <cfset querySetCell(queryLog,"ruleID","1484")> 
    </cfif> 

編集:この問題は、この順序でこれらの番号と具体的に関連付けられているようです。私が.1、.1、.3、1.5、18、80と入力すると、ルールは起動しません。今私はさらに混乱しています。

+0

疑わしいときは、データを見てください。この場合、レースの値を何度も出力します。 –

+1

あなたのコード 'は、計算された合計と文字列 '100'を比較します。引用符を外して数字を比較してください。 –

+1

その数字の組み合わせは、[CF11で100になる](http://trycf.com/gist/0cf4ce41cb2a2ff5302fa04358b18966/acf?theme=monokai)、それ以外の値は可能ではありません。 CFはほとんどの数学演算におおよその型を使用するため、結果は丸数字に見えるかもしれませんが、常にそうであるとは限りません。参照:http://stackoverflow.com/questions/7422510/why-does-0-06-0-01-0-07-in-coldfusion http://stackoverflow.com/questions/2002821/why-does-この減算 - 非ゼロ -/2002837#2002837 – Leigh

答えて

1

バーナード氏によれば、「100」ではなく、100と比較すべきです。しかし、さらに懸念される別の問題があります。

入力が小数でもよいため、私たちは浮動小数点数の世界に入ります。ここでは、EQまたはNEQを使って比較するのは無駄です。代わりに、公差で作業します。

あなたの公差が1%、つまり、0.01である場合たとえば、その後、あなたのテストは、その後

<!--- Test for a race value of 100, given a tolerance of 0.01---> 
<cfif abs(race-100.0) LT 0.01> 

あなたは最寄りの千分のへの許容値を設定した場合、それは、0.001である、あなたのテストの意志になりますがbe

<!--- Test for a race value of 100, given a tolerance of 0.001---> 
<cfif abs(race-100.0) LT 0.001> 
関連する問題