我有一个简单的循环:
<cfoutput>
<cfloop from="0.01" to="0.06" index="i" step="0.01">
<p>i=#i#</p>
</cfloop>
</cfoutput>
输出为:
i=0.01
i=0.02
i=0.03
i=0.04
i=0.05
期望值0.06
没有出现!如果我通过0.01
增加或减少"To“的值,那么循环就能正常工作。
I have created an example of the issue here on TryCF。单击"Run Code“按钮以生成输出。
有什么想法吗?
发布于 2015-10-13 00:07:06
我的猜测是,这里的问题是ColdFusion如何处理数字。它正在将字符串"0.01“和"0.06”转换为数字,并可能在某些时候失去精度。请记住,ColdFusion是松散类型的。
ColdFusion不使用变量的显式类型,而是强类型的。但是,Java确实使用底层ColdFusion类型来表示数据。
From Java and ColdFusion data type conversions
我修改了TryCF上的ColdFusion示例,试图表明我的观点。我使用javacast()
显式地将数字定义为浮点数。Try the new code here.
<cfloop from="#javacast('float','0.01')#"
to="#javacast('float','0.06')#"
index="i"
step="#javacast('float','0.01')#">
i=#i#<br>
</cfloop>
现在,这将输出预期的六次。
i=0.00999999977648
i=0.019999999553
i=0.0299999993294
i=0.0399999991059
i=0.0499999988824
i=0.0599999986589
然后,您可以在输出这些值时添加NumberFormat()
函数,以获得所需的输出。不确定这里需要的精确度。你也可以使用邓肯的例子。
<cfloop from="#javacast('float','0.01')#"
to="#javacast('float','0.06')#"
index="i"
step="#javacast('float','0.01')#">
i=#NumberFormat(i,"9.99")#<br>
</cfloop>
输出:
i=0.01
i=0.02
i=0.03
i=0.04
i=0.05
i=0.06
发布于 2015-10-12 23:44:05
听起来像是窃听器。你总是可以做到这一点,它似乎是有效的:
<cfloop from="1" to="6" index="i" step="1">
i=#i/100#<br>
</cfloop>
https://stackoverflow.com/questions/33081707
复制相似问题