2013-01-16 7 views
2

Actuellement, ma demande est à l'affiche un message d'erreur:Conversion chaîne vide en entier

« La valeur « » ne peut pas être convertie en nombre. »

Ce qui ne me surprend pas. La variable vient d'être ajoutée, donc la variable est une chaîne vide pour tous ceux qui ont utilisé l'application avant de créer le nouveau champ.

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

Le calcul à la fin est pour un système de pointage. La variable tstudentRecruit est définie sur 0 avant cette ligne, donc elle se trouve certainement dans la variable studentRecruit. Quelle est la bonne façon de convertir la chaîne vide en entier? Y at-il quelque chose qui est manifestement faux ici?

+1

Euh, ''? –

+10

Vous pouvez également consulter les fonctions [** isNumeric **] (http://cfdocs.org/isNumeric) et/ou [** val **] (http://cfdocs.org/val) pour ce faire. –

+0

Le fait que vous comptiez quelque chose pourrait être une erreur flagrante. L'un des principes d'une conception de base de données normalisée est de ne pas stocker les valeurs calculées. Bien sûr, je n'ai aucune idée de ce que vous envisagez de faire avec la variable une fois que vous l'avez fait fonctionner. –

Répondre

5

Je changerais le code légèrement pour lire:

<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> 

Peu de choses que je fais ici:

Tout d'abord, le changement cfif studentRecruitComments NEQ "" pour vérifier réellement sur la longueur la chaîne comme oposed à vérifier si elle est vide. J'ajoute trim pour supprimer tous les espaces vides qui pourraient exister.

Ensuite, je vérifie que la variable studentRecruit est un nombre, et si ce n'est pas le cas, je le mets à 0, de cette façon, votre code n'échouera pas.

De toute évidence, je ne connais pas vraiment le contexte de votre code, car je pense qu'il pourrait être encore amélioré. Toutefois, l'utilisation de mon extrait de code entraînera la disparition de l'erreur.

HTH

+1

pourquoi ne pas simplement dire « Ajouter la valeur'? Si la valeur est 0 pas besoin de l'ajouter au compteur existant –

+0

Je suis allé avec la configuration de studentRecruit car il peut avoir besoin de la variable en cours de route sur son script –

+0

Oui, nous avons vraiment besoin de plus de contexte. Ce qui précède est une bonne explication, mais ne fonctionnerait pas si ce code est dans une boucle de requête et 'studentRecruit' est une colonne de requête. Dans une boucle de requête, '' non écrasé ne remplace pas ** ** la valeur de la colonne de requête. Il crée une variable distincte dans la portée 'variables'.Mais l'opération d'addition utiliserait toujours la valeur de la requête (car 'studentRecruit' est non-limité). Donc finalement, vous auriez toujours la même erreur. Comme l'a dit @Marcos, nous avons besoin de plus de contexte pour fournir la bonne réponse pour votre code spécifique. – Leigh

4

Vous pouvez simplement utiliser la fonction val() qui renvoie soit le nombre ou la conversion en cas d'échec, retourne zéro. Vous n'avez donc pas à vérifier si votre variable est numérique ou non.

+0

Que diriez-vous de: '' –

+2

Vous devez être prudent en recommandant la syntaxe comme + = car il est relativement nouveau et la version CF n'est indiquée nulle part. – Travis

Questions connexes