> 웹 프론트엔드 > 프런트엔드 Q&A > JavaScript 작업의 정밀도가 떨어지면 어떻게 되나요?

JavaScript 작업의 정밀도가 떨어지면 어떻게 되나요?

PHPz
풀어 주다: 2023-04-21 09:23:48
원래의
1628명이 탐색했습니다.

일상 프로그래밍에서 우리는 다양한 수치 연산을 처리하기 위해 다양한 프로그래밍 언어를 사용하는 경우가 많으며, 그중 JavaScript가 의심할 여지 없이 가장 널리 사용되는 언어입니다. 그러나 극단적인 경우 복잡한 수치 계산을 처리할 때 연산 결과의 정밀도가 떨어지는 상황이 발생할 수 있습니다. 그렇다면 왜 이런 일이 발생합니까? 계산 정밀도 손실을 방지하는 방법은 무엇입니까?

  1. 연산 정밀도가 떨어지는 이유
    JavaScript에서 연산 정밀도가 떨어지는 주요 원인 중 하나는 부동 소수점 수의 부정확성입니다. JavaScript에는 64비트 부동소수점 숫자 표현을 사용하는 Number 유형이 하나만 있습니다. 표현할 수 있는 최대값은 1.7976931348623157e+308이고, 최소값은 5e-324입니다. 소수, 부동 소수점 숫자 의 이진 표현은 종종 정확하게 표현되지 않아 정밀도가 손실됩니다. 다음 예를 살펴보세요.
console.log(0.1 + 0.2); // 0.30000000000000004
로그인 후 복사

바이너리는 0.1과 0.2를 정확하게 표현할 수 없기 때문에 JavaScript에서는 덧셈 결과가 부정확하고 소수점 뒤에 추가 숫자가 있습니다.

  1. 계산 정확도 손실을 방지하는 방법
    계산 정확도 손실을 방지하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 일반적인 방법입니다.

2.1 계산에 정수 사용
복잡한 연산을 수행할 때 소수를 정수로 변환하여 계산하고 마지막으로 결과를 소수로 변환할 수 있습니다. 예를 들어 다음 코드는 0.1과 0.2에 각각 10을 곱한 다음 결과를 더하고 최종적으로 결과를 10으로 나눌 수 있습니다.

console.log((0.1 * 10 + 0.2 * 10) / 10); // 0.3
로그인 후 복사

2.2 toFixed() 함수 사용
JavaScript의 Number 유형은 toFixed() 메서드를 제공합니다. 숫자를 지정된 정밀도로 소수로 변환합니다(괄호 안에 있는 소수 자릿수는 유지됩니다). 예를 들어, 다음 코드에서 toFixed() 함수는 소수점 이하 두 자리를 유지하고 최종적으로 정밀도 0.30의 부동 소수점 숫자를 얻습니다.

console.log((0.1 + 0.2).toFixed(2)); // 0.30
로그인 후 복사

2.3 정밀도 확장
정밀도 손실을 방지하기 위해 JavaScript의 작업 정확도를 높일 수 있습니다. 일반적인 접근 방식은 십진수를 정수로 변환한 다음 계산을 수행하는 것입니다. 또 다른 옵션은 JavaScript에서 BigNumber 라이브러리를 사용하는 것입니다. 이 라이브러리는 작업의 정확성을 크게 향상시킬 수 있는 고정밀 숫자 유형을 제공합니다. 예를 들어 다음 코드는 BigNumber 라이브러리를 사용하여 연산 정밀도 손실 문제를 해결할 수 있습니다.

var BigNumber = require('bignumber.js');
var x = new BigNumber("0.1");
var y = new BigNumber("0.2");
console.log(x.plus(y).toString()); // "0.3"
로그인 후 복사

이 문서에는 JavaScript에서 연산 정밀도 손실의 원인과 일반적인 방지 방법이 요약되어 있습니다. 복잡한 수치 계산을 처리할 때 특정 문제를 주의 깊게 분석하고 적절한 방법을 채택하여 정확도 손실을 방지하고 프로그램의 정확성을 보장해야 합니다.

위 내용은 JavaScript 작업의 정밀도가 떨어지면 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿