2014-06-14 4 views
0

이중 숫자가 정수로 올바르게 변환되지 않는 문제에 봉착했습니다.double에서 integer 로의 변환

cuberoot=10 
a=9 

왜 여기에 = 9가 아니라 10이 대소>

int x=1000; 

double cuberoot=pow(x,(1/(double)3)); 

int a=cuberoot; 

cout<<"cuberoot="<<cuberoot<<endl; 

cout<<"a="<<a<<endl; 

출력에서 ​​

?

이 문제의 해결책은 무엇입니까 ?? cuberoot (10)에 매우 근접하지만 확실히 때문에

또한 나는 그것이 3 만 하지 4.

+0

숫자에 작은 양수를 추가 한 다음 루트를 계산할 수 있습니다. 'x = 1000 + 0.05'와 같습니다. 그러면'a = 10'이됩니다. –

+1

그것은'입방체 '가 아닙니다 - 그게 x^3이 될 것입니다 –

답변

1

로 변환해야 value..if A를 다음 = 3.67를 반올림하고 싶지 않아 10. std::cout은 10으로 숫자를 잘라 버리고 반올림하지만 정수로 변환하면 십진수가 제거되므로 a = 9입니다. 이 문제를 해결하려면 std::round()을 사용하십시오.

int a=round(cuberoot); 
+0

이렇게 모든 해결책은 여기에 = 10입니까? – user2826957

+0

은 round() 함수를 사용합니다. – OldProgrammer

+0

실제로 문제는 정확하게 둥글게하고 싶지 않다는 것입니다. – user2826957

0

왜 그런지보십시오!

#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main(){ 
    int x = 1000; 
    double cube = pow(x, 1.0/3.0); 
    int a = cube; 
    cout<<"cube="<< fixed << setprecision(16) << cube<<endl; 
    cout<<"a="<<a<<endl; 
}