2013-01-16 120 views
2

目前,我的应用程序显示此错误消息:将空字符串转换为整数

“值''不能转换为数字。

这并不让我感到意外。该变量刚刚添加,因此,在创建新字段之前,对于使用该应用程序的任何人来说,该变量都是一个空字符串。

<td><cfif studentRecruitComments neq ""> 
     <a href="javascript: showContent('#studentRecruitComments#')"> 
      #studentRecruit# 
     </a> 
    <cfelse> 
     #studentRecruit# 
    </cfif> 
</td> 
<cfset tstudentRecruit = tstudentRecruit + studentRecruit> 

数学在最后是一个统计系统。变量tstudentRecruit在该行之前也设置为0,所以它肯定位于studentRecruit变量中。将空字符串转换为整数的正确方法是什么?这里有什么是公然错误的吗?

+1

呃,''? –

+10

或者,查看函数[** isNumeric **](http://cfdocs.org/isNumeric)和/或[** val **](http://cfdocs.org/val)来执行此操作。 –

+0

事实上,你正在计算一切可能是一个公然的错误。规范化数据库设计的原则之一是不存储计算值。当然,我不知道你打算如何处理这个变量。 –

回答

5

我会改变的代码稍微阅读:

<td> 
    <cfif NOT Len(trim(studentRecruitComments))> 
     <a href="javascript: showContent('#studentRecruitComments#')"> 
      #studentRecruit# 
     </a> 
    <cfelse> 
     #studentRecruit# 
    </cfif> 
</td> 
<cfif NOT isNumeric(studentRecruit)> 
    <cfset studentRecruit = 0> 
</cfif> 
<cfset tstudentRecruit = tstudentRecruit + studentRecruit> 

几件事情我在这里做:

首先,改变CFIF studentRecruitComments NEQ“”实际检查的长度该字符串被视为检查是否为空。我;添加修剪删除任何可能存在的空白空间。

然后我检查变量studentRecruit是一个数字,如果不是,我将它设置为0,这样,你的代码就不会失败。

显然我并不真正了解代码的上下文,因为我认为它可以进一步改进。

但是,使用我的代码片段将导致错误消失。

HTH

+1

为什么不只是说'添加值'?如果值为0,则不需要将其添加到现有计数器 –

+0

我随设置studentRecruit一起前进,因为他可能需要沿着他的脚本上的变量 –

+0

是的,我们肯定需要更多的上下文。上面是一个很好的解释,但是如果这个代码在查询循环内并且'studentRecruit'是一个查询列,这将不起作用。在查询循环中,unscoped的不会**覆盖查询列值。它在'variables'范围内创建一个单独的变量。但是加法操作仍然会使用查询值(因为'studentRecruit'是无法显示的)。所以最终你仍然会得到同样的错误。正如@Marcos所说,我们需要更多的上下文来为您的特定代码提供正确的答案。 – Leigh

4

你可以简单地利用VAL()函数或者返回的数量,或者如果转换失败,返回零。所以你不必检查你的变量是否是数字。

+0

怎么样:'' –

+2

你必须小心推荐+ =的语法,因为它比较新,CF版本没有任何地方显示。 – Travis