프론트/Javascript

javascript 소수점 이하 반올림 소수점 계산 오류

척척박사또라에몽 2022. 5. 29. 23:09

안녕하세요.

오랜만에 글을 쓰네요

일주일에 한번씩

꼭 그 주에 업무 했던 내용을

복습차원에서 쓰려고

했지만

응~ 실패

~

하반기 새로운 목표로 설정했습니다!!

이번엔 업무 중 js로 계산을 해서 round up

해야하는 일이 있었는데요

아시는 분은 아시겠지만

연산을 했을 때 소수점을 연산을 하면 제대로 값이 안나오는 경우가 있습니다.

js에서 숫자를 64비트 IEEE 754 형식으로 다루는데

0.1이라고 하면 0.1에 가장 가까운 2진법으로 표현 하는 방식이라고 합니다

0.1 -> 64비트 IEEE 754 형식에 의한 2진법 -> 10진법

1/3 = 0.333333333.... 이렇게 무한소수가 나와서...

js는 이런 무한소수가 나오면 한번 반올림을 해서 값이 다르게 나온다고 합니다

굉장히 cs 지식의 영역이기 때문에

따로 검색하시는 것을 권장합니다ㅎㅎ

부호며, 지수부며 가수부며 이론적인 이야기가많이 들어가니까용

정확한 연산을 얻으려면

https://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript

[How to deal with floating point number precision in JavaScript?

I have the following dummy test script: function test() { var x = 0.1 * 0.2; document.write(x); } test(); This will print the result 0.020000000000000004 while it should just pri...

stackoverflow.com](https://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript)

1. js용 수학 라이브러리를 쓴다

2. toFixed() 함수 사용

3. Math.round() 함수 사용

  1. 1. 수학 라이브러리 사용

https://mathjs.org/

[math.js | an extensive math library for JavaScript and Node.js

An extensive math library for JavaScript and Node.js # Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constan

mathjs.org](https://mathjs.org/)

2. toFixed() 사용

고정 소수점 자리를 선택해서 string을 반환합니다.

const number = 1.23456
console.log(number.toFixed()) // 1.23456
console.log(number.toFixed(1)) // 1.2
console.log(number.toFixed(2)) // 1.23
console.log(number.toFixed(3)) // 1.235

const number1 = 1.1
console.log(number1.toFixed(2)) // 1.10

소수점 2번째 자리까지 나오게 하려고 하면 3번째 자리 수를 반올림해서 1.23(3은 5보다 작아서 반올림하면 내려가서 여전히 3으로 나옴)

이런식으로 뒤에 더이상 숫자가 없는데 소수점 2번째 자리수까지 나오게 하면 0이 붙어서 1.10이 됩니다.

 

3. Math.round()

반올림을 해서 number를 반환합니다.