2013-05-01 3 views
-3
console.log((57/100) * 100); 

자바에서이 수학을했을 때 항상 56.99999999를 반환합니다. 왜 그것의 57.00000 아닌가요?이 계산이 정수를 반환하지 않는 이유는 무엇입니까?

+4

이것은 일반적으로 부동 소수점 연산의 정확성을 제외한 자바 스크립트로 제한하지 않는 문제, http://floating-point-gui.de /. – Xotic750

+0

따라 가기 http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – Trikaldarshi

답변

2

정확한 답변을 얻으려면 정수로 작업하거나 십진수 라이브러리를 사용해야합니다. Javascript에 정수를 사용하여 값을 계산 한 다음 10 진수로 다시 값을 변환하는 소수 라이브러리가 있습니다. 예를 들어, 자바 스크립트 용 BigNumber 라이브러리가 있습니다.

이 이유는 (57/100) 섹션이 플로트 또는 Javascript의 부동 소수점 숫자를 반환하기 때문입니다. JavaScript는 64-bit floating point numbers을 사용하며, 대부분의 시스템에서 53 비트의 정밀도로 float의 가수 또는 숫자 부분 (3.2에서 3.2e4)을 나타냅니다. 대부분의 시스템은 IEEE-754 부동 소수점 표준을 사용합니다. 부동 소수점 연산은 마지막 위치의 한 단위 (IEEE-754 64 비트의 경우 54 번째 비트) 미만이면 부동 소수점 연산의 오류를 허용합니다. 따라서 모든 부동 소수점은 잘리고, 반올림되거나 잘려서 결과가 소수를 반환합니다. 이런 일이 발생하는 이유에 대한 자세한 내용은

, 당신은 또한 볼 수 있습니다 Is floating point math broken?

관련 문제