2013-07-12 2 views
-1

두 개의 변수 유형이 있는데 그 합이 올바르지 않습니다. C의AS3 - 숫자 var 및 정밀도 합계의 합

var a:Number = 1.1; 
var b:Number = 2.2; 
var c:Number = a + b; 

결과는 3.3000000003 대신 나는이 문제를 해결할 수있는 방법 3.3

입니다 :

이 내 시나리오?

분명히 샘플의 'a'와 'b'의 정밀도는 쉼표 뒤에 1 자이지만 여러 수 있습니다.

답변

1

예상되는 동작입니다. 실제로 이진수 시스템에서 특정 숫자를 표현하는 것은 꽤 어렵습니다. 가까운 aprox.

1.00011001100110011001100110011001... (1.09999..) 

는 슬프게도 1.2 똑같이 어렵다 : 결과 줘야

1.00110011001100110011001100110011... (1.19999..) 

을 당신이 1100 반복 계속주의 수도있다. 십진법에서 1/3을 표현하는 것이 불가능한 것처럼.

솔루션은 c를 반올림하여 정밀도를 떨어 뜨릴 수 있습니다.

trace(c.ToString(1)); 
+0

답변 해 주셔서 감사합니다. 나는 정밀도를 잃을 수 없기 때문에 접근 방식을 바꾸어야한다. –