首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Integer NEQ Int(Integer)疯狂

Integer NEQ Int(Integer)疯狂
EN

Stack Overflow用户
提问于 2012-02-07 05:44:32
回答 3查看 138关注 0票数 0

我正在尝试检测我是否已经将复数分数的分子和分母乘以足够的次数(乘以10/10),以获得顶部和底部的整数。通常,我的算法是有效的。但是,有时Int()函数并不能像预期的那样工作,我从中得到了很大的收获。以下是我正在运行的程序的简化版本:

代码语言:javascript
复制
<cfoutput>
    <cfset RealNumber = RandRange(1000, 10000) / 1000 />
    RealNumber = "#RealNumber#" Int(RealNumber) = "#Int(RealNumber)#"<br />
    <cfloop condition="RealNumber NEQ Int(RealNumber)">
        <cfset RealNumber = RealNumber * 10 />
        RealNumber = "#RealNumber#" Int(RealNumber) = "#Int(RealNumber)#"<br />
    </cfloop>
</cfoutput>

大多数情况下,这会得到我想要的结果,但有时看起来是这样的:

代码语言:javascript
复制
RealNumber = "9.184" Int(RealNumber) = "9"
RealNumber = "91.84" Int(RealNumber) = "91"
RealNumber = "918.4" Int(RealNumber) = "918"
RealNumber = "9184" Int(RealNumber) = "9183"
RealNumber = "91840" Int(RealNumber) = "91839"
RealNumber = "918400" Int(RealNumber) = "918399"
RealNumber = "9184000" Int(RealNumber) = "9183999"
RealNumber = "91840000" Int(RealNumber) = "91839999"
RealNumber = "918400000" Int(RealNumber) = "918399999"
RealNumber = "9184000000" Int(RealNumber) = "9183999999"
RealNumber = "91840000000" Int(RealNumber) = "91839999999"
RealNumber = "918400000000" Int(RealNumber) = "918399999999"
RealNumber = "9.184E+012" Int(RealNumber) = "9.184E+012"
RealNumber = "9.184E+013" Int(RealNumber) = "9.184E+013"
RealNumber = "9.184E+014" Int(RealNumber) = "9.184E+014"
RealNumber = "9.184E+015" Int(RealNumber) = "9.184E+015"

或者甚至像这样:

代码语言:javascript
复制
RealNumber = "2.152" Int(RealNumber) = "2"
RealNumber = "21.52" Int(RealNumber) = "21"
RealNumber = "215.2" Int(RealNumber) = "215"
RealNumber = "2152" Int(RealNumber) = "2152"
RealNumber = "21520" Int(RealNumber) = "21520"
RealNumber = "215200" Int(RealNumber) = "215200"
RealNumber = "2152000" Int(RealNumber) = "2152000"
RealNumber = "21520000" Int(RealNumber) = "21520000"
RealNumber = "215200000" Int(RealNumber) = "215200000"
RealNumber = "2152000000" Int(RealNumber) = "2152000000"
RealNumber = "21520000000" Int(RealNumber) = "21520000000"
RealNumber = "215200000000" Int(RealNumber) = "215200000000"
RealNumber = "2.152E+012" Int(RealNumber) = "2.152E+012"
RealNumber = "2.152E+013" Int(RealNumber) = "2.152E+013"
RealNumber = "2.152E+014" Int(RealNumber) = "2.152E+014"
RealNumber = "2.152E+015" Int(RealNumber) = "2.152E+015"
RealNumber = "2.152E+016" Int(RealNumber) = "2.152E+016"

我做错了什么?我该如何补偿?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-07 06:13:36

Val()似乎也纠正了这个错误:

代码语言:javascript
复制
<cfoutput>

    <cfset RealNumber = RandRange(1000, 10000) / 1000 />
    "#val(RealNumber)#" = INT: "#val(Int(RealNumber))#"<br />
    <cfloop condition="val(RealNumber) NEQ Val(Int(RealNumber))">
        <cfset RealNumber = RealNumber * 10 />
        "#val(RealNumber)#" INT: "#val(Int(RealNumber))#"<br />
    </cfloop>

</cfoutput>
票数 -1
EN

Stack Overflow用户

发布于 2012-02-07 06:53:02

RealNumber = "9.184E+015“

结果是有欺骗性的。如果您使用#RealNumber.toString()#,则实际的值可能类似于9.183999999999998E15。CF对于大多数数学运算,使用近似类型Double。因此,您看到的是floating point numbers的正常行为。如果您需要更高的精度,请使用PrecisionEvaluate。它使用BigDecimals进行算术运算(因为它们比java.lang.Double更精确)。

票数 2
EN

Stack Overflow用户

发布于 2012-02-07 06:05:16

尝试使用javacast..ColdFusion正在尝试动态确定您的变量类型,但做得不是很好。Javacast涵盖了大量的罪过。

代码语言:javascript
复制
<cfoutput>
<cfset RealNumber = RandRange(1000, 10000) / 1000 />
RealNumber = "#RealNumber#" Int(RealNumber) = "#Int(RealNumber)#"<br />
<cfloop condition="RealNumber NEQ Int(RealNumber)">
    <cfset RealNumber = RealNumber * 10 />
    RealNumber = "#RealNumber#" Int(RealNumber) = "#javaCast("int", RealNumber)#"<br />
</cfloop>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9167709

复制
相关文章

相似问题

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