Я застрял в проблеме, когда двойной номер не получает правильное преобразование в целое.
В этом case->
int x=1000;
double cuberoot=pow(x,(1/(double)3));
int a=cuberoot;
cout<<"cuberoot="<<cuberoot<<endl;
cout<<"a="<<a<<endl;
Вывод:
cuberoot=10
a=9
Почему здесь а = 9, а не 10?
Любое решение этой проблемы?
Также я не хочу округлять значение. Если a = 3.67, тогда он должен быть преобразован только в 3, а не в 4.
Поскольку cuberoot
очень близок к 10, но не совсем 10. std::cout
обрезает и округляет число до 10, но преобразование с двойным целым будет разделять десятичное число, поэтому a = 9
. Чтобы решить эту проблему, вы можете использовать std::round()
:
int a=round(cuberoot);
Попробуйте это и посмотрите, почему!
#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;
}
x=1000+0.05
. Это далоa=10
.cube
- Это было бы х ^ 3