0

I am stuck in problem where the double number is not getting properly converted to integer.

In this case->

int x=1000;

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

int a=cuberoot;

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

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

Output:

cuberoot=10
a=9

Why here a=9 and not 10?

Any solution to this problem??

Also I don't want to round the value..if a=3.67 then it should be converted to 3 only and not 4.

yizzlez
  • 8,757
  • 4
  • 29
  • 44
user2826957
  • 303
  • 2
  • 3
  • 12

2 Answers2

1

Because the cuberoot is very close to 10 but not quite 10. std::cout truncates and rounds the number to 10, but a double to integer conversion will strip the decimal which is why a = 9. To solve this problem, you can use std::round():

int a=round(cuberoot);
yizzlez
  • 8,757
  • 4
  • 29
  • 44
0

Try this and see why!

#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;
}
druckermanly
  • 2,694
  • 15
  • 27