2012-11-08 49 views
1

我在if条件中使用变量时遇到问题。我有三个变量,其中一个是字符串类型,另外两个是Json。这里settings.DecimalDigits值是2或任何大于2将字符串转换为浮动数字Javascript

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

整数&尾数将具有存储在controlValue作为字符串一定值。 controlValue然后与其他两个变量(settings.MaxValue & settings.MinValue)在IF条件,但通过其状况不会比它的类型是字符串类型

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

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

在我分析这三个变量将在浮动型

controlValue = 123.23 123.00或
settings.MaxValue = 99.99
settings.MinValue = -99.99 0123三个值 请帮忙,这样解析穿过IF条件

回答

1

jfriend00's answer帮我解决了我的问题。下面的解决方案:

  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

嗯,所以我帮你解决这个问题,没有其他人提供任何帮助。你从我的答案中获得一些信息,并将其纳入你的解决方案(一件好事),然后你最终从我的答案中拿走任何信用,所以我根本没有收到任何声誉信用,因为你在这里相对较新,也许你不明白SO是如何工作的,但是如果你奖励那些帮助你的人,它通常会更好。 – jfriend00

+0

Hi @ jfriend00,我试着点击你的答案的投票,它给出了一个表示你需要15点声望的方法。 :)无论如何感谢很多人......但答案没有多大帮助。然而,找到了解决办法。:) – teenu

+0

是的,当您的声誉如此之低时,您可以奖励回答者的唯一方法就是接受他们的答案。回答其他人的问题可以获得更多的声誉。 – jfriend00

2

.toFixed()将您的号码回字符串。如果你想再次回到一个数字,那么你需要使用parseFloat。可能有更好的方法来做到这一点,但建立在现有的代码,你会作出controlValue一个数字,将在您的if声明中再次合作,通过调用parseFloat()这样的:

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

仅供参考,它可能会更有意义刚刚处理的数量完全为数字,而不是来回走为字符串几次:

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

或者甚至只是这样的:

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

酷.... :)我打破了我的头这个简单的解决方案。 lols ...谢谢@ jfriend00 – teenu

+0

@ShishirKumarM - 我给我的答案增加了几个选项。 – jfriend00

+0

我在寻找一个返回结果为213.00的结果,其中数字应该跟随**“。00”**。你能帮我解决这个问题吗?如果“”之后的结果不是00,结果将返回尾数。 – teenu