-1

我最近编写了一些代码来安排消息发送到我们的 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 中执行取模操作会返回一个整数,而不是浮点数,因此会自动将元素四舍五入为零。

4

2 回答 2

2

你不能把它改成这样:

<cfset secondsAdd = minutesPerMail - minutesAdd>
于 2011-11-14T22:34:55.620 回答
-1

为了进一步解释 MOD,它返回一个余数或 0。将其视为 TRUE 或 FALSE,这样如果它返回 TRUE,它就有一个余数,但如果它返回 FALSE,它就没有余数。希望这有助于澄清为什么它返回一个整数而不是一个浮点数。

于 2012-10-24T16:11:34.093 回答