부동 소수점 값의 정밀도가 제한되어 있기 때문에 발생합니다. 자세한 내용은 The Floating Point Guide을 참조하십시오.
약식으로 1/3
을 십진수로 나타낼 수없는 것처럼 짧은 숫자는 0.52
숫자의 소수 부분을 정확하게 이진 형식으로 나타낼 수 없다는 것입니다. 제한된 숫자의 정확성 때문에 더 큰 숫자는 작은 것보다 약간 더 정확하므로 정확하게 정확히 100 배가 아닙니다.
그게 이해가되지 않는다면, 은 1/3을 다루는이고 10 진수로 10 진수로 표시되는 척하는 것으로 상상해보십시오. 당신이 선언하면 :
var t1 = 1000.0/3.0;
var t2 = 10.0/3.0;
그런 다음 t2
은 주어진 정밀도로 표현 될 수있는만큼 가까이있는 3.3333333333
으로 표시됩니다. t2
의 100 배인 값은 333.3333333300
이지만 t1
은 실제로는 333.3333333333
으로 표시됩니다. 다른 숫자에 대해 다른 지점에 반올림/잘라 내기가 적용되므로 이 아니며 정확히 100 번 t2
입니다.
부동 소수점 반올림 문제가있는 항상 그렇듯이 해결 방법은 십진수 형식을 사용하는 것입니다. 위의 가이드에서 Javascript cheat-sheet을보고이 문제를 해결할 방법을 찾아보십시오.
그래서 무엇이 문제입니까? – Prinzhorn
정확한 금액을 받으시겠습니까 ?? – karthi
부동 소수점 숫자는 어떻게 작동합니까? – alex