c++ - 结构数组中的十进制浮点数有问题
问题描述
我遇到了一些麻烦,我什至无法弄清楚出了什么问题,所以我需要一些帮助。对于每个结构,我需要获取数组中的一个结构所具有的百分比。
我的结构看起来像
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 循环运行时字段中有数据。但是当我以我需要的方式运行方程时,它会去哪里呢?
我尝试初始化它并保持未初始化,将指针交换为循环内的整数,等等,我总是得到相同的结果。
请帮我理解。
解决方案
我认为你的totalnumber
isint
和person.number
int 类型也是如此。
对于int
s之间的操作,返回值仍然是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);
推荐阅读
- python - 如何检查字符串是否包含列表中的项目,然后将现有值添加到 python 中的变量?
- python - 如何在多个接收器上仅触发一次 Django 信号
- java - "not in" is working but "not exists" is not working in hql
- javascript - 将已知类型与未知类型进行比较的正确方法是什么?
- reactjs - 如何设置日期字段的最小和最大日期?
- google-apps-script - 将自动创建的 Gmail 标签分配给各个线程 - 谷歌应用脚本
- php - mysql 获取昨天的标志(另一列不是日期时间类型)
- r - 循环一个向量以将其应用于函数以执行网络抓取
- opennlp - 如何使用 NLP 将句子拆分为文本和数字?
- c++ - //usr/lib64/librt.so.1:命令行中缺少 DSO