我最近编写了一些代码来安排消息发送到我们的 SMTP 服务器之一。此数据存储在 MySQL 数据库中。该算法根据每小时限制安排消息。这是算法的一部分,它在一个循环中根据需要调度尽可能多的消息。
<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 中执行取模操作会返回一个整数,而不是浮点数,因此会自动将元素四舍五入为零。