2012-11-08 7 views
1

if 조건 변수를 사용하는 데 문제가 있습니다. 나는 3 개의 변수를 가지고 있는데, 하나는 문자열 타입이고 두 개는 Json이다. 여기 settings.DecimalDigits 값은 문자열로 controlValue에 저장된 특정 값을 갖게됩니다 2 또는 아무것도 이상의 2문자열을 부동 번호로 변환 Javascript

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

정수 & 가수이다. 이 유형 문자열 유형

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

      if (controlValue < settings.MinValue) 
       controlValue = settings.MinValue; 
내이 세 가지를 모두 분석에서

같이 controlValue 그런 다음 다른 두 개의 변수 (settings.MaxValue & settings.MinValue) IF 조건에 있지만 조건을 통과하지와 비교 변수 123.23 또는 123.00 settings.MaxValue
=
99.99 settings.MinValue = -99.99플로팅 타입

controlValue = 세 값을 갖 는 구문 분석 다시 문자열로 전화 번호를 도는 조건 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

흠. 그래서 이걸 알아내는 데 도움이됩니다. 당신은 내 대답에서 약간의 정보를 가져 와서 그것을 당신의 솔루션에 통합하고 (좋은 점), 당신은 내 대답에서 어떤 신용도 빼앗기 게됩니다. 그래서 나는 당신을 돕기 위해 평판 신용을 전혀받지 못합니다. 어쩌면 당신은 어떻게 일하는지 이해할 수 없지만, 보통 당신을 도우려는 사람들에게 보상을 주면 더 잘 작동합니다. – jfriend00

+0

안녕하세요 @ jfriend00, 답변에 대한 투표를 클릭 해 보았습니다. 그 :) 어쨌든 많은 사람에게 감사 ...하지만 대답은별로 도움이되지 않았다. 그러나 해결 방법을 찾았습니다. :) – teenu

+0

네가 그렇게 낮은 평판을 얻은 경우 답변을받을 수있는 유일한 방법은 대답을 수락하는 것입니다. 다른 사람들의 질문에 답하면 더 많은 평판을 얻을 수 있습니다. – jfriend00

2

.toFixed() 통과되도록 도와주세요. 다시 숫자로 되돌리려면 parseFloat를 사용해야합니다. 이이 작업을 수행하는 아마 더 나은 방법이 있지만, 기존의 코드를 작성, 당신은 다음과 같이 다시 parseFloat()를 호출하여 if 문에서 작동 할 수 controlValue 만들 것 :

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 ... Thanks @ jfriend00 – teenu

+0

@ShishirKumarM - 나는 내 대답에 몇 가지 옵션을 추가했다. – jfriend00

+0

결과를 213.00으로 반환하는 결과를 찾고 있는데, 여기서 번호는 **. 00 "**이어야합니다. 이걸 좀 도와 주실 래요? "."다음에 00이 아닌 경우 결과는 가수를 반환합니다. – teenu

관련 문제