首页 > 解决方案 > 结构数组中的十进制浮点数有问题

问题描述

我遇到了一些麻烦,我什至无法弄清楚出了什么问题,所以我需要一些帮助。对于每个结构,我需要获取数组中的一个结构所具有的百分比。

我的结构看起来像

struct person{
    int number;
    string name;
    float share;
}

所以我使用for循环来获取总数,没问题,一切都很好。但是当我试图得到总数的百分比时,我总是得到零。

for (int i=0; i<numberOfPersons;i++){
    people[i].share = 100 * ((people[i].number)/totalNumber);
}

我不明白这里出了什么问题,但是当我 cout 时 people[i].share 总是显示为 0.00。

从字面上看,我在这之后所做的就是 cout 它,我从 number 和 totalNumber 中得到正确的值。所以我真的很困惑。

如果我翻转除法问题,我会得到答案(显然不是正确的答案),所以我知道当 for 循环运行时字段中有数据。但是当我以我需要的方式运行方程时,它会去哪里呢?

我尝试初始化它并保持未初始化,将指针交换为循环内的整数,等等,我总是得到相同的结果。

请帮我理解。

标签: c++floating-pointdynamic-arrays

解决方案


我认为你的totalnumberisintperson.numberint 类型也是如此。

对于ints之间的操作,返回值仍然是int

扩大people[i].share = 100 * ((people[i].number)/totalNumber);

会是这样的people[i].share = 100 * ( 1/10 );

=>people[i].share = 100 * ( 0 );

=>people[i].share = 0;

所以你会得到 0 作为结果;

为了防止它,将 int 之一转换为浮动。

people[i].share = 100 * ((static_cast<float>(people[i].number))/totalNumber);


推荐阅读