Web/Javascript

JavaScript 소수점 반올림 연산 속도 비교(toFixed, Math.round)

bitcoder 2022. 2. 15. 16:03
728x90

소수점 반올림할때 toFixed()함수를 주로 사용했습니다. 그런데 toFixed()함수가 문자로 값을 반환하다 보니 계산할때 ParseFloat()함수를 추가로 사용해야 하는 경우가 꽤 있습니다. 이렇게 추가함수를 사용할 경우 속도가 떨어지는게 당연할텐데 그게 어느 정도인지 궁금해서 테스트를 해봤습니다.

 

백만회 반복, 소수점 2자리 반올림

const t0 = performance.now()
for (let i = 0; i < 1000000; i++) {
  let a = 341.348181293
  a.toFixed(2)
}
const t1 = performance.now()
console.log('toFixed')
console.log(t1 - t0, 'msecs')

const t2 = performance.now()
for (let i = 0; i < 1000000; i++) {
  let a = 341.348181293
  parseFloat(a.toFixed(2))
}
const t3 = performance.now()
console.log('parseFloat,toFixed')
console.log(t3 - t2, 'msecs')

const t4 = performance.now()
for (let i = 0; i < 1000000; i++) {
  let a = 341.348181293
  let b = Number(a.toFixed(2))
}
const t5 = performance.now()
console.log('Number,toFixed')
console.log(t5 - t4, 'msecs')

const t6 = performance.now()
for (let i = 0; i < 1000000; i++) {
  let a = 341.348181293
  let b = Math.round(a)*100/100
}
const t7 = performance.now()
console.log('Math.round')
console.log(t7 - t6, 'msecs')

const t8 = performance.now()
for (let i = 0; i < 1000000; i++) {
  let a = 341.348181293
  let b = (Math.round(a)*100/100).toString()
}
const t9 = performance.now()
console.log('Math.round,toString')
console.log(t9 - t8, 'msecs')

// toFixed
// 169.20000000298023 'msecs'

// parseFloat,toFixed
// 255.80000001192093 'msecs'

// Number,toFixed
// 307.20000000298023 'msecs'

// Math.round
// 2.7999999970197678 'msecs'

// Math.round,toString
// 11.799999997019768 'msecs'

Math.round가 압도적으로 빠릅니다. toString()으로 문자 변환해도 더 빠릅니다.

빠른 계산이 필요한 경우에는 Math.round를 사용해야겠습니다.

728x90

'Web > Javascript' 카테고리의 다른 글

4 Point Sphere  (0) 2022.12.14
javascript map함수 사용법  (0) 2022.07.05
Electron을 이용한 데스크탑앱 개발 시작하기  (0) 2022.03.08
[javascript] canvas 기초 사각형 그리기  (0) 2022.03.04