C++项目:将整数转换为双精度

jyztefdp  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(316)

大家好,我是C++编程的新手,我被分配了一个项目,我必须建立一个程序来计算人口的平均出生率和死亡率百分比。我目前停留在这一步,我需要将整数值转换为双精度值以获得正确的输出。例如,求出生率的函数是(出生数/人口),由于整数相除导致浮点数被截断,结果为0,而不是(10/100等于0.1)。我知道我声明了整数,但这是必需的。我考虑过类型转换,但没有转换值的运气。我为冗长的解释道歉,我希望它是有意义的。提前感谢!

这是以下标准:

1.私有变量:必须为整数(人口、出生、死亡)
1.公共职能

*默认构造函数不带参数,初始化(population = 2),(birth & deaths = 0)
*构造函数带有三个参数。构造函数应该为Population对象传递人口、出生人数和死亡人数。

1.“设置”成员函数用于三个成员变量中的每一个。如果人口数字小于2并传递给类,则使用默认值2。如果传递的出生或死亡数字小于0,则使用默认值0。
1.getBirthrate成员函数。根据以下公式计算出生率:(出生率=出生人数/人口)
1.getDeathrate成员函数。根据以下公式计算死亡率:(死亡率=死亡人数/人口)

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

//  Population class declaration
class Population
{
private:
    int population, births, deaths;

public:
    // default constructor: with no parameters
    Population()
    {
        population = 2;
        births = 0;
        deaths = 0;
    }

    // constructor
    Population(int p, int b, int d)
    {
        population = p;
        births = b;
        deaths = d;
    }

    // birthrate member function
    int getBirthrate();
    // deathrate member function
    int getDeathrate();

    void setPopulation(int);
    void setBirth(int);
    void setDeath(int);
    int getPopulation();
    int getBirth(int);
    int getDeaths(int);
};

// member functions
void Population::setPopulation(int p)
{
    if (population < 2)
    {
        population = 2;
        cout << "Error: Invalid population input!" << endl;
    }
    else
    {
        population = p;
    }
}

void Population::setBirth(int b)
{
    if (births < 0)
    {
        births = 0;
        cout << "Error: Invalid births input!" << endl;
    }
    else
    {
        births = b;
    }
}

void Population::setDeath(int d)
{
    if (deaths < 0)
    {
        deaths = 0;
        cout << "Error: Invalid deaths input!" << endl;
    }
    else
    {
        deaths = d;
    }
}

int Population::getPopulation()
{
    return population;
}

int Population::getBirth(int)
{
    return births;
}

int Population::getDeaths(int)
{
    return deaths;
}

// calculating functions
int Population::getBirthrate()
{
    return births / population;
}

int Population::getDeathrate()
{
    return deaths / population;
}

// main function
int main()
{
    // instantiation of a population object
    Population x;

    int xBirths, xDeaths, xPopulation;

    // getting the values
    cout << "What is the population: " << endl;
    cin >> xPopulation;

    cout << "What is the number of births: " << endl;
    cin >> xBirths;

    cout << "What are the number of deaths: " << endl;
    cin >> xDeaths;

    // set functions
    x.setPopulation(xPopulation);
    x.setBirth(xBirths);
    x.setDeath(xDeaths);

    // calculating the values
    cout << "The population is: " << x.getPopulation() << endl;
    cout << "The birthrate is: " << x.getBirthrate() << endl;
    cout << "The deathrate is: " << x.getDeathrate() << endl;

    return 0;
}
juud5qan

juud5qan1#

我猜你有两个问题

int Population::getDeathrate()
{
    return deaths / population;
}

第一个问题是,正如你所指出的,你正在做整数除法,你可以通过类型转换来解决这个问题;第二个问题是,你的函数返回一个整数,而从上面的问题看,你似乎想要一个浮点结果,例如10/100 = 0.1。这个问题的解决方案是将返回类型改为double
所以把这两个放在一起

double Population::getDeathrate()
{
    return (double)deaths / (double)population;
}
xiozqbni

xiozqbni2#

而不是这样:

int Population::getBirthrate()
{
   return births / population;
}

执行以下操作:

int Population::getBirthrate()
{
   return (births * 1.0) / population;
}

将整数乘以1.0将它们转换为双精度。

相关问题