ColdFusion模数函数返回不正确的值

时间:2011-11-14 22:21:19

标签: coldfusion modulus

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

2 个答案:

答案 0 :(得分:2)

你不能把它改成这个:

<cfset secondsAdd = minutesPerMail - minutesAdd>

答案 1 :(得分:-1)

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