首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >步进0.01到0.06时,CFLoop是否无法正常工作?

步进0.01到0.06时,CFLoop是否无法正常工作?
EN

Stack Overflow用户
提问于 2015-10-12 20:56:05
回答 2查看 119关注 0票数 2

我有一个简单的循环:

代码语言:javascript
运行
复制
<cfoutput>
    <cfloop from="0.01" to="0.06" index="i" step="0.01">
        <p>i=#i#</p>
    </cfloop>
</cfoutput>

输出为:

代码语言:javascript
运行
复制
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“按钮以生成输出。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 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.

代码语言:javascript
运行
复制
<cfloop from="#javacast('float','0.01')#" 
        to="#javacast('float','0.06')#" 
        index="i" 
        step="#javacast('float','0.01')#">
    i=#i#<br>
</cfloop>

现在,这将输出预期的六次。

代码语言:javascript
运行
复制
i=0.00999999977648
i=0.019999999553
i=0.0299999993294
i=0.0399999991059
i=0.0499999988824
i=0.0599999986589

然后,您可以在输出这些值时添加NumberFormat()函数,以获得所需的输出。不确定这里需要的精确度。你也可以使用邓肯的例子。

代码语言:javascript
运行
复制
<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>

输出:

代码语言:javascript
运行
复制
i=0.01
i=0.02
i=0.03
i=0.04
i=0.05
i=0.06
票数 4
EN

Stack Overflow用户

发布于 2015-10-12 23:44:05

听起来像是窃听器。你总是可以做到这一点,它似乎是有效的:

代码语言:javascript
运行
复制
<cfloop from="1" to="6" index="i" step="1">
    i=#i/100#<br>
</cfloop>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33081707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档