먼저 문제를 재현하기 위해 데모를 작성하십시오. JS 온라인 테스트 환경을 사용하고 있습니다 [Open]
DisplayNum () 함수를 다시 작성하십시오
함수 displayNum () {var num = 22.77; Alert (num + 10);}표시 버튼 결과를 클릭하면 32.7699999999996 N DECIMALS가 나타납니다.
22.99 2.777을 제외하고 모든 숫자 가이 현상을 가질 수는 없습니다.이 숫자는 특별하지 않은 것 같습니다.
정보를 확인했습니다. 하나는 JS 플로팅 포인트 계산의 버그이고, 다른 하나는 컴퓨터를 이진 계산으로의 최종 변환과 관련이 있습니다. 그러나 왜 모든 소수성 이이 현상을 가지고 있지 않습니까? 지금은 모르겠습니다. 시간이 있으면 더 깊이 갈 것입니다.
현재 두 가지 솔루션이 있습니다. 첫 번째는 js .tofixed (n) 메소드를 사용하여 n-figit decimals를 직접 얻는 것입니다. 개인적 으로이 방법은 데이터 정확도에 문제가있을 것이라고 생각합니다. 데이터 정확도 요구 사항이 높지 않으면 사용할 수 있습니다. 두 번째 방법은 자신의 JS 작업 방법을 작성하는 것입니다.
다음은 사용자 정의 추가 기능입니다. 이 방법을 추가하면 위의 문제를 피할 수 있습니다.
함수 addnum (num1, num2) {var sq1, sq2, m; try {sq1 = num1.tostring (). split ( ".") Catch (e) {SQ2 = 0;} M = Math.Pow (10, Math.Max (SQ1, SQ2)); return (Num1 * M + Num2 * M) / M;}물론, 그것은 또한 경고 ((num * 3+10 * 3) /3)로 쓸 수 있습니다. 이런 식으로, n에는 더 이상 소수점이 없을 것이다.
경고 ((Num * 3+10 * 3) /3); 및 경고 (Num+10); 경고와 다릅니다 (Num+10). 이 두 가지 방법은 컴퓨터를 작성하여 하단 계층의 이진 작업으로 변환합니다. 아마도 이것이 위의 문제의 이유 일 것입니다.
소수점을 계산하고 다수의 소수성을 표시하는 JS 소수점에 대한 위의 기사는 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.