javascript (js) 의 소수점 곱셈 나 누 기 문제 상세 설명
왜 이런 문제 가 생 겼 습 니까?어떻게 해결 합 니까?js 는 소수 곱셈 법 을 처리 할 때 bug 가 있 습 니 다. 해결 방법 은 소 수 를 정수 로 바 꾸 어 처리 할 수 있 습 니 다.이상 의 계산 은 12.32 * 100 * 7 / 100 으로 바 꿀 수 있 습 니 다. 결 과 는 86.24 이 고 정확 합 니 다.
또 계산 해 보면 8.80 * 100 * 12 / 100 결과 105.600000000000238.80 도 비슷 한 문제 가 발생 할 수 있다.
정확도 10 배 증가: 8.80 * 1000 * 12 / 1000 결과: 105.6 정상 입 니 다.
16.40 * 1000000 * 6 / 1000000 결과 에 도 문제 가 있 습 니 다.
js 가 더욱 정확하게 실 행 될 수 있 도록 앞으로 js 소수 계산 에서 직접 값 을 10000 배 확대 하고 10000 을 나 누 면 문 제 를 해결 할 수 있다.var num = 38.80;var num2 = 13;alert(num * 10000 * 12 / 10000);
곱 하기 와 나 누 기 이 수 는 테스트 를 통 해 10000 이 가장 적합 하고 작은 숫자 에 문제 가 생 겼 으 며 큰 숫자 (1000000) 에 도 문제 가 생 겼 다.
둘째,
<br>Number.prototype.rate=function(){
<br>varoStr=this.toString();
<br>if(oStr.indexOf(".")==-1)
<br>return1;
<br>else
<br>returnMath.pow(10,parseInt(oStr.length-oStr.indexOf(".")-1));
<br>}
<p></p>
<p>functiontran(){<br>args=tran.arguments;<br>vartemp=1;<br>for(i=0;i<args.length;i++)<br>temp*=args[i]*args[i].rate();<br>for(i=0;i<args.length;i++)<br>temp/=args[i].rate();<br>returntemp<br>}<br>alert(tran(11,22.9));<br>
이 해결 방법 은 비교적 번 거 로 운 방법 이지 만, 너 로 하여 금 이 문 제 를 해결 하 는 실제 과정 을 대충 이해 하 게 할 수 있다.
// ,
// :javascript , 。 。
// :accDiv(arg1,arg2)
// :arg1 arg2
function accDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
// Number div , 。
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
// ,
// :javascript , 。 。
// :accMul(arg1,arg2)
// :arg1 arg2
function accMul(arg1,arg2)
{
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
// Number mul , 。
Number.prototype.mul = function (arg){
return accMul(arg, this);
}
// ,
// :javascript , 。 。
// :accAdd(arg1,arg2)
// :arg1 arg2
function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (arg1*m+arg2*m)/m
}
// Number add , 。
Number.prototype.add = function (arg){
return accAdd(arg,this);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.