js 가감 곱 하기 정확 한 계산

2598 단어 js가감 승제
JS 에서 정확하게 계산 할 수 없 는 bug
CRM,2 세대 심사 수요 심사 상세 페이지 를 만 들 때.사용자 가 입력 한 숫자 를 비율(백 엔 드 에서 0.8 과 유사 한 소수)에 따라 다른 곳 에 표시 해 야 합 니 다.
dubheInvest=invest*(1-ratio)를 하고 있 습 니 다.연산 할 때 문 제 를 발견 하 다.구체 적 으로 다음 과 같다.
예제 코드:

console.log( 1 - 0.8 ); //   0.19999999999999996 
console.log( 6 * 0.7 ); //   4.199999999999999 
console.log( 0.1 + 0.2 ); //   0.30000000000000004 
console.log( 0.1 + 0.7 ); //   0.7999999999999999 
console.log( 1.2 / 0.2 ); //   5.999999999999999 
위 에서 제시 한 예 를 통 해 알 수 있 듯 이 원생 의 js 연산 결과 가 반드시 정확 하지 않 고 정밀 도 를 잃 을 수 있다.
해결 방안
해결 방안 의 원 리 는 부동 소수점 을 10 의 n 제곱 배 에 곱 하고 부동 소수점 을 정수 로 바 꾼 후 해당 하 는 연산 을 한 다음 에 얻 은 결 과 를 10 의 n 제곱 배로 나 누 는 것 이다.
원리 예시:
console.log(1-0.8);  console.log(1*10-0.8*10)/10 으로 변경 합 니 다.정확 한 값 을 얻 을 수 있 습 니 다.
상술 한 원리 에 근거 하여 몇 가지 방법 을 봉 하여 이런 문 제 를 해결 할 수 있다.다음 과 같다(Math.pow(x,y).구 x 의 y 제곱 을 나타 낸다):

//  
function floatAdd(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; 
} 
  
//  
function floatSub(arg1,arg2){ 
 var r1,r2,m,n; 
 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)); 
 //         
 n=(r1>=r2)?r1:r2; 
 return ((arg1*m-arg2*m)/m).toFixed(n); 
} 
  
//  
function floatMul(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); 
} 
  
  
//  
function floatDiv(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){} 
   
  r1=Number(arg1.toString().replace(".","")); 
 
  r2=Number(arg2.toString().replace(".","")); 
  return (r1/r2)*Math.pow(10,t2-t1); 
} 
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 js 가감 승제 정확 한 계산 과 상세 한 통합 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.만약 에 궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기