나는 자바 스크립트에서 작동하는 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;
}
이 https://stackoverflow.com/questions/850341/how-do-i-work-around-javascripts-parseint-octal-behavior – mplungjan
그건 진짜 렉서 파서를하지 마십시오 중복되지 않았습니까? 대답과 질문을 읽었습니까? – Epitouille
수식에만 parseFloat 또는 parseInt를 사용할 수 없습니다. 귀하의 URL은 숫자만을 구문 분석합니다. –