最近、SMTPサーバーの1つに送信するメッセージをスケジュールするコードをいくつか作成しました。このデータはMySQLデータベースに保存されます。アルゴリズムは、1時間ごとの制限に基づいてメッセージをスケジュールします。これはアルゴリズムの一部であり、必要な数のメッセージをスケジュールするためのループ内にあります。
<cfif hourlyLimit lte 60>
<cfset minutesPerMail = 60 / hourlyLimit>
<cfset minutesAdd = int(minutesPerMail)>
<cfset secondsAdd = round((minutesPerMail % 1) * 60)>
<cfset queueDate = #DateAdd('n', minutesAdd, queueDate)#>
<cfset queueDate = #DateAdd('s', secondsAdd, queueDate)#>
デバッグの目的で、この部分に次のコードを追加しました...
<cfdump var="#minutesPerMail#"> (Outputs 1.421857...)
<cfdump var="#secondsAdd#"> (Outputs 0)
もともと丸め誤差があるのではないかと思ったので、次のコードを追加しました...
<cfset modTest = minutesPerMail % 1>
<cfdump var="#modTest#"> (Outputs 0)
ご覧のとおり、modTest変数を使用すると、適切な出力が.421857 ...になるため、モジュラス関数が適切に機能しません。
編集/解決策:ColdFusion内でモジュラスアクションを実行すると、浮動小数点数ではなく整数が返されるため、要素は自動的にゼロに丸められます。