我最近编写了一些代码,用于安排邮件发送到我们的某个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中执行模数操作会返回一个整数,而不是浮点数,因此会自动将元素舍入为零。
答案 0 :(得分:2)
你不能把它改成这个:
<cfset secondsAdd = minutesPerMail - minutesAdd>
答案 1 :(得分:-1)
为了进一步解释MOD,它返回余数或0.将其视为TRUE或FALSE,以便如果它返回TRUE,则它有一个余数,但如果它返回FALSE,则它没有余数。希望这有助于澄清为什么它返回一个整数而不是浮点数。