int()的意外行为

3

我对ColdFusion 10 (10,0,20,282462)中int()函数的以下行为感到有些困惑:

<cfset dummy = 100 - (5859 / (6510 / 100)) />
<cfoutput>
    dummy = #dummy#<br><br> <!--- 10 --->
    int(10) = #int(10)#<br> <!--- 10 --->
    int(dummy) = #int(dummy)# <!--- 9 --->
</cfoutput>

有人能解释一下为什么int(dummy)返回的是9而不是10吗?这与IT技术有关。

3
虚拟变量实际上是一个浮点数。它只是以整数形式显示。使用数字格式将其输出,以查看实际值。 - Dan Bracuk
1
要确认它是浮点数,请参考 https://dev59.com/rGgu5IYBdhLWcg3wnYLo - James A Mohler
也许可以先四舍五入,然后使用Javacast?这将返回10。<cfset dummy = Javacast("int", round(100 - (5859 / (6510 / 100))))> - James Moberg
与大多数数字一样,CF将除法的结果存储为近似类型:java.lang.Double和十进制数字在基数为2时“看起来”是圆的,但实际上无法准确表示。在这种情况下,实际值约为9.999999999999986,向下取整后等于9,而不是10。 - Leigh
1个回答

0

int(dummy) 返回 9 而不是 10,因为它本质上是其他语言中的 floor(),而且由于性能原因,默认情况下它们被视为 double,所以你的答案可能会变成 9

你听说过 PrecisionEvaluate() 吗?https://cfdocs.org/precisionevaluate

dummy = PrecisionEvaluate(100 - (5859 / (6510 / 100)));
writeOutput(dummy);

你将会得到预期的结果10


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接