js 개발 에 있어 서 소수 계산 함 수 를 유지 합 니 다.

4385 단어
전단 작업 에서 숫자 계산 보존 소수 문제 가 자주 발생 합 니 다. 반올림 방식 이 아니 기 때문에 toFixed 함 수 를 사용 할 수 없습니다. 본 고 는 정규 표현 식 이 문자열 과 일치 하 는 방식 으로 숫자 에 대한 위로 또는 아래로 소수 문 제 를 해결 합 니 다.
1. 작은 숫자 를 위로 유지 합 니 다.
function upFixed (num, fix) {
  // num    ,fix        
  let result = '0'
  if (Number(num) && fix > 0) { //        
    fix = +fix || 2
    num = num + ''
    if (/e/.test(num)) { //      e         
      result = num
    } else if (!/\./.test(num)) { //        
      result = num + `.${Array(fix + 1).join('0')}`
    } else { //       
      num = num + `${Array(fix + 1).join('0')}`
      let reg = new RegExp(`-?\\d*\\.\\d{0,${fix}}`)
      let floorStr = reg.exec(num)[0]
      if (+floorStr >= +num) {
        result = floorStr
      } else {
        let floorNumber = +floorStr + +`0.${Array(fix).join('0')}1`
        let point = /\./.test(floorNumber + '') ? '' : '.'
        let floorStr2 = floorNumber + point + `${Array(fix + 1).join('0')}`
        result = reg.exec(floorStr2)[0]
      }
    }
  }
  return result
}

2. 아래 에 소수 유지 (목표 소수 자리 후의 숫자 를 직접 버 리 고 계산 후의 수치 가 원래 의 수치 보다 크 지 않도록 확보한다)
function downFixed (num, fix) {
  // num    ,fix        
  let result = '0'
  if (Number(num) && fix > 0) { //        
    fix = +fix || 2
    num = num + ''
    if (/e/.test(num)) { //      e         
      result = num
    } else if (!/\./.test(num)) { //        
      result = num + `.${Array(fix + 1).join('0')}`
    } else { //       
      num = num + `${Array(fix + 1).join('0')}`
      let reg = new RegExp(`-?\\d*.\\d{0,${fix}}`)
      result = reg.exec(num)[0]
    }
  }
  return result
}

주: 이 방법 은 과학 계수 법 을 사용 한 숫자 를 처리 하지 않 고 바로 되 돌려 줍 니 다.
다른: 두 함수 가 매우 유사 하 므 로 자신의 수요 에 따라 합병 하여 최적화 하면 된다.
문제 가 발견 되면 가르침 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기