2017-12-13 4 views
-2

나는 자바 스크립트에서 작동하는 html로 계산기를 가지고 있습니다. 사용자가 하나의 입력 필드에 값을 모두 10 진수로 입력했습니다. 하지만 실수로 사용자가 010 대신 10을 입력하면 eval은 octa 결과를 얻습니다.eval을 사용하면 십진수 자바 스크립트 대신 옥타브가 반환됩니다.

샘플 1 : eval ('20 * 15 + 8 * 10 '); 결과 380 (정확함)

샘플 2 : eval ('20 * 15 + 8 * 010 '); 결과 364 (잘못)

사용할 수있는 다른 방법이 있습니까? 또는 eval을 사용하기 전에 모든 값을 10 진수로 변환하려면 어떻게해야합니까? 여기

내 코드 :

function recalcula() 
{ 
    var doc=document.forma; 
    try 
    { 

    s_1=0; 
    for(i=1;i<=9;i++) 
    { 
     CorrigeCampo(eval('doc.a1_'+i),0); 
     abc=eval('doc.a1_'+i+'.value.replace(/,/g,"")'); 
     x_1=parseFloat(eval(abc)); 


     //x_1=parseFloat(eval(abc.replace(/\b0(\d+)\b/g, '$1'))); 

     if((isNaN(x_1))||(x_1==0)) 
     { 
      x_1=0; 
      eval('doc.a20_'+i+'.value="";'); 
      eval('doc.a1_'+i+'.value="";'); 
     } 
     else 
      eval('doc.a20_'+i+'.value=x_1.toFixed(4);'); 


     s_1+=x_1; 
    } 

    doc.Suma_1.value=s_1.toFixed(4); 

} 
catch(e) 
{} 

} 

function CorrigeCampo(campo,def) 
{ 

    cadenanueva=""; 
    valorcampo=campo.value; 

    carpermitidos=".*/-+"; 
    for(j=0;j<valorcampo.length;j++) 
    { 
     act=valorcampo.substring(j,j+1); 
     if(carpermitidos.indexOf(act)>=0) 
     { 

      cadenanueva+=act; 

     } 
    } 
    if(cadenanueva=="") 
     cadenanueva=def; 
    campo.value=cadenanueva; 
} 
+1

이 https://stackoverflow.com/questions/850341/how-do-i-work-around-javascripts-parseint-octal-behavior – mplungjan

+0

그건 진짜 렉서 파서를하지 마십시오 중복되지 않았습니까? 대답과 질문을 읽었습니까? – Epitouille

+0

수식에만 parseFloat 또는 parseInt를 사용할 수 없습니다. 귀하의 URL은 숫자만을 구문 분석합니다. –

답변

0

할 수 있습니다 : 10 번호를 확인하고에서는 parseInt (번호 수와 서라운드 번호를 식별하는 0

  • 사용 정규식을 선도하고 제거하는

    • 사용 정규식);
    • 는 평가 사용
  • +0

    이것이 최선의 방법이라고 생각합니다. 정규 표현식을 사용하여 숫자를 식별하고 선행 0을 제거하지만 정규 표현식을 만들 수는 없습니다. 당신은 그것에 전문가입니까? –

    +0

    @GerardoAbdo 내 마지막 코멘트를 보았습니까 ??? – mplungjan

    관련 문제