false
부동소수점 형식의 한계 때문
JS에서 모든 숫자는 IEEE 754 표준을 따르는 64비트 부동소수점 형식으로 저장됨
이 방식은 일부 소수점 연산에서 정확한 값을 저장하지 못하는 한계를 가짐
ex - 0.1과 0.2를 이진수로 변환하면 무한 반복되는 소수로 표현되어 컴퓨터는 이를 근사값으로 저장함
이로 인해 겨로가적으로 0.1+0.2의 실제 값은 0.30000000000000004이여서 0.3과 일치하지 않음
특정 자릿수까지 반올림하는 것 toFixed(), toPrecision() 메서드 사용 가능
but 이 방법은 숫자가 문자열로 변환되는 부작용이 있음
다른 방법은 Number.EPSILON 을 활용하여 비교하는 것
Number.EPSILON은 자바스크립트에서 표현할 수 있는 가장 작은 수
이 값을 이용하여 두 수 비교하는 함수 작성할 수 있음
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)) // true;
Math.abs(a-b) <= 절대값 구하는 함수
console.log(Math.abs(5)); // 5
console.log(Math.abs(-5)); // 5
console.log(Math.abs(0 - 1)); // 1
Number.EPSILON는 자바스크립트가 숫자를 비교할 때 허용하는 최소한의 차이
return Math.abs(a - b) < Number.EPSILON;
즉 이 로직은 a와 b의 차이가 거의 안난다면 같다고 보자 라는 의미