2017-01-20 13 views
0

두 자리 숫자를 나눠서 두 개의 다른 변수로 결과를 얻으려고합니다. 특정 번호의 문제가 발생했습니다 : 23.두 자리 숫자를 나눕니다.

int root = 23; 
float div = (float)root/10.0; // div = 23.0/10.0 = 2.3 

int left = (int)div; // left = 2 
int right = ((float)div - (float)left) * 10.0; // right = (2.3 - 2) * 10.0 = 0.3 * 10.0 = 3 

printf("%d", right); // 2, why ? 

float-to-int 연산이 많으며 최종 결과에 약간의 문제가 있습니다. 나는 놓치거나 뭔가 잡지 않았는가?

+5

OMG,'A = 루트/10; b = root % 10;' – 0andriy

+0

10.0이 때로는 int로 해석되기 때문에 두 번째 숫자를 변환하여 simmilar 문제가 발생했다는 것을 약간 기억합니다. 다시 작성해보십시오 :'float div = (float) root/(부동 (float)) 10.0; // div = 23.0/10.0 = 2.3' – pytomaniaq

+1

참고로 - 보통 정확하지 않은 수레는 피하는 것이 가장 좋습니다. –

답변

6

0.3은 2 진수로 정확하게 표시되지 않을 수 있으므로 int으로 변환하면 2이되는 2.9999 ...가됩니다. 대신

:

int root = 23; 
int left = root/10; 
int right = root % 10; 
+0

그게 내가 갖고 싶었던 설명이다. 따라서 '%'는 해결책입니다. 감사 ! –

관련 문제