2012-11-08 5 views
1

J'ai un problème en utilisant une variable dans if condition. J'ai trois variables où l'un est un type de chaîne et deux de plus dans Json. Ici, la valeur de settings.DecimalDigits est 2 ou quoi que ce soit plus de 2.Conversion d'une chaîne en nombre flottant Javascript

var controlValue = integer + '.' + mantissa; 
controlValue = parseFloat(controlValue).toFixed(settings.DecimalDigits); 

entier & mantisse aura une certaine valeur qui est stockée dans controlValue sous forme de chaîne. controlValue est ensuite comparée à deux autres variables (settings.MaxValue & settings.MinValue) à condition IF mais sa va pas par l'état comme type est de type chaîne

if (controlValue > settings.MaxValue) 
       controlValue = settings.MaxValue; 

      if (controlValue < settings.MinValue) 
       controlValue = settings.MinValue; 

Dans mon analyse tous les trois les variables auront trois valeurs de type flottant

controlValue = 123,23 ou 123,00
settings.MaxValue = 99,99
settings.MinValue = -99,99
S'il vous plaît aider à ce que l'analyse syntaxique passe par le IF Condition

Répondre

1

jfriend00's answer m'a aidé à résoudre mon problème. Solution ci-dessous:

  var controlValue = e.target.value; //get value from input 
      controlValue = Number(controlValue); //Converting the string to number 

      // Number format parses through if condition 
      if (controlValue > settings.MaxValue) 
       controlValue = Number(settings.MaxValue); 
      if (controlValue < settings.MinValue) 
       controlValue = Number(settings.MinValue); 

      // if the value is having a mantissa 00. It will be rejected by Number() function. So next line its converted again to string format using .toFixed() function. 

      var controlValue = controlValue.toFixed(settings.DecimalDigits); 

      // Splitting the value into two parts integer and mantissa 
      integer = controlValue.split('.')[0]; 
      if (typeof integer == 'undefined' || integer == null || integer == "" || isNaN(integer)) 
       integer = 0; 

      // settings.DecimalDigits is the variable to set any default number of mantissa required to appear. 
      mantissa = controlValue.split('.')[1]; 
      if (typeof mantissa == 'undefined') { 
       mantissa = ""; 
       for (i = 0; i < settings.DecimalDigits; i++) 
        mantissa += '0'; 
      } 

      // Finally you have the result 
      controlValue = integer + '.' + mantissa; 
+2

Hmmm Donc, je vous aider à comprendre cela. Vous prenez quelques informations de ma réponse et l'incorporez dans votre solution (une bonne chose) et alors vous finissez par enlever n'importe quel crédit de ma réponse ainsi je ne reçois aucun crédit de réputation du tout pour vous aider Comme vous êtes relativement nouveau ici, peut-être que vous ne comprenez pas comment ça fonctionne, mais ça fonctionne généralement mieux si vous récompensez ceux qui vous aident – jfriend00

+0

Salut @ jfriend00, j'ai essayé de cliquer sur le vote pour votre réponse .Il donne une boîte disant que vous avez besoin de 15 réputation pour faire ça :) Merci quand même beaucoup d'homme ... Mais la réponse n'a pas beaucoup aidé. Cependant trouvé un travail autour. :) – teenu

+0

Oui, quand vous êtes si bas de réputation, la seule façon que vous pouvez récompenser un répondeur est en acceptant leur réponse. Vous pouvez gagner plus de réputation en répondant aux questions des autres. – jfriend00

2

.toFixed() transforme votre numéro dans une chaîne. Si vous voulez revenir à un nombre, vous devez utiliser parseFloat dessus. Il y a probablement de meilleures façons de le faire, mais la construction de votre code existant, vous feriez controlValue un certain nombre qui fonctionnerait dans votre déclaration if en appelant parseFloat() à nouveau comme ceci:

var controlValue = integer + '.' + mantissa; 
controlValue = parseFloat(parseFloat(controlValue).toFixed(settings.DecimalDigits)); 

Pour votre information, il serait plus logique juste gérer le nombre tout comme un nombre plutôt que de revenir en arrière pour cordes à plusieurs reprises:

var controlValue = parseFloat(integer + '.' + mantissa); 
var filter = Math.pow(10, settings.DecimalDigits); 
controlValue = Math.round(controlValue * filter)/filter; 

ou peut-être même ceci:

var controlValue = parseFloat(integer + '.' + mantissa.toString().substr(0, settings.DecimalDigits)); 
+0

Cool .... :) Je me casse la tête pour cette solution simple. lols ... Merci @ jfriend00 – teenu

+0

@ShishirKumarM - J'ai ajouté quelques options supplémentaires à ma réponse. – jfriend00

+0

Je cherche un résultat qui renvoie le résultat en 213.00, où le nombre doit être suivi ** ". 00" **. Pourriez-vous s'il vous plaît m'aider avec ça? Le résultat renverra la mantisse si elle est autre que 00 après "." – teenu

Questions connexes