为什么值列表将整数转换为浮点数?

时间:2012-06-18 14:22:45

标签: coldfusion

ColdFusion的valuelist函数文档说它不会评估这些值,而这就是过去它总是对我的表现。我过去曾多次使用valuelist函数,之前从未遇到过这个问题。我们正在使用CF9.0.1,但这最初出现在CF9.0的一个实例上。

当我们从Oracle数据库中提取number值时,出现了这种情况,该数据库支持浮点值。存储的值都是整数,而不是浮点数。下面的代码复制了我们看到的行为。数据是通过我们可以更改的存储过程检索的(使用CAST),但如果可能的话,我们希望避免使用。

<cfscript>
    qryVLTest = queryNew('member_id') ;
    for ( i = 1; i LTE 10; i=i+1) {
      queryAddRow(qryVLTest,1) ;
      querySetCell(qryVLTest,'member_id',i) ;   
    }
    writedump(qryVLTest) ;
    writeoutput(valuelist(qryVLTest.member_id)) ;
</cfscript>

转储显示我期望的值:整数1-10。

但是,valuelist函数的输出返回以下内容:

1,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0

评估第一个之后的所有值并将其转换为浮点数。为什么会这样,以后如何防止这种情况发生?

2 个答案:

答案 0 :(得分:6)

你有2个选择。你可以这样做:

querySetCell(qryVLTEst,"member_id","#i#")

哪个应该强制一个字符串。或者你可以指定INT,如果这是你想要的(如azawaza所示)。

queryNew("member_id","Integer");

答案 1 :(得分:3)

我知道你说你不想使用CAST(),但也许你的意思是在Oracle中。请记住,您也可以使用Q的Q来加入CF.

运行Oracle Query,然后使用查询查询重新编号,如

<cfquery name="blah" dbtype="query">
SELECT CAST(member_ID AS Integer) AS member_ID
FROM  myFancyPantsOracleQuery
</cfquery>

这就是我认为的伎俩。