C++ 读取文件时如何计算百分比?
我想知道在从文件流读取数据时如何计算百分比。我试过这种方法,但得到的结果是零C++ 读取文件时如何计算百分比?,c++,c,C++,C,我想知道在从文件流读取数据时如何计算百分比。我试过这种方法,但得到的结果是零 typedef struct Counter{ int range1,range2,range3,range4; double preset1 ,preset2 ,preset3 ,preset4; } countType; void analysis_range(double d, countType &ctp) { // from 0 to 1.00 KM
typedef struct Counter{
int range1,range2,range3,range4;
double preset1 ,preset2 ,preset3 ,preset4;
} countType;
void analysis_range(double d, countType &ctp) {
// from 0 to 1.00 KM
if (d >= 0.00 && d <= 1.00) {
ctp.range1 += 1;
ctp.preset1 = ((ctp.range1 / (ctp.range1 + ctp.range2 + ctp.range3 +
ctp.range4)));
}
// from 1.00 to 2.00 KM
else if (d > 1.00 && d <= 2.00) {
ctp.range2 += 1;
ctp.preset2 = ((ctp.range2 / (ctp.range1 + ctp.range2 + ctp.range3 +
ctp.range4))) *
10;
}
// from 1.00 to 2.00 KM
else if (d > 2.00 && d <= 5.00) {
ctp.range3 += 1;
ctp.preset3 = ((ctp.range3 / (ctp.range1 + ctp.range2 + ctp.range3 +
ctp.range4))) *
10;
}
// grater than 5.00 KM
else if (d > 5.00) {
ctp.range4 += 1;
ctp.preset4 = ((ctp.range4 / (ctp.range1 + ctp.range2 + ctp.range3 +
ctp.range4))) *
10;
}
}
void ProcesData(int rank, int numProcs) {
static countType count;
MPI_Datatype recType = createRecType();
// read file and populate the vectors
ifstream foodbankFile("foodbanks.dat");
ifstream residenceFile("residences.dat");
// populate datavector
std::vector<Foodbank> foodbankData(
(std::istream_iterator<Foodbank>(foodbankFile)),
std::istream_iterator<Foodbank>());
Residence res;
int numLines = 0;
while (!residenceFile.eof()) {
residenceFile >> res.x >> res.y;
if (numLines % numProcs == rank) {
// call the process
// populate_distancesVector(res,foodbankData);
analysis_range(populate_distancesVector(res, foodbankData),
count);
}
++numLines;
}
std::cout << "for Rank" << rank << ",from 0 to 1.00 KM:" << count.range1
<< ",%" << count.preset1
<< ",from 1.00 to 2.00 KM:" << count.range2 << ",%"
<< count.preset2 << ",from 2.00 to 5.00 KM:" << count.range3
<< ",%" << count.preset3
<< ",grater than 5.00 KM:" << count.range4 << ",%"
<< count.preset3 << std::endl;
}
typedef结构计数器{
int范围1、范围2、范围3、范围4;
双预设1、预设2、预设3、预设4;
}计数类型;
孔隙分析范围(双d、计数类型和ctp){
//从0公里到1.00公里
如果(d>=0.00&&d 1.00&&d 2.00&&d 5.00){
ctp.range4+=1;
ctp.preset4=((ctp.range4/(ctp.range1+ctp.range2+ctp.range3+
ctp.range(4)))*
10;
}
}
void ProcesData(int秩,int numProcs){
静态计数类型计数;
MPI_数据类型recType=createRecType();
//读取文件并填充向量
ifstream foodbankFile(“foodbanks.dat”);
ifstream residenceFile(“residences.dat”);
//填充数据向量
std::向量foodbankData(
(std::istream_迭代器(foodbankFile)),
std::istreamu迭代器();
res公寓;
int numLines=0;
而(!residefile.eof()){
住宅文件>>res.x>>res.y;
if(numLines%numProcs==rank){
//调用进程
//填充_distancesVector(res、foodbankData);
分析范围(填充距离向量(res、foodbankData),
计数);
}
++努姆林;
}
std::cout您可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:
ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));
可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:
ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));
可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:
ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));
可能会得到零,因为ctp.range1到ctp.range4不是浮点值。如果将整数除以整数,结果也会变成整数。将其中一个操作数强制转换为浮点或双精度,如下所示:
ctp.preset1 = (((float) ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4)));
因此,我知道ctp.preset1假设根据ctp.range1中的计数保持范围1的百分比
在方程的这一部分中,如果使用整数,得到零的原因是:
(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:
(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
一切都会好起来的。因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比
在方程的这一部分中,如果使用整数,得到零的原因是:
(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:
(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
一切都会好起来的。因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比
在方程的这一部分中,如果使用整数,得到零的原因是:
(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:
(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
一切都会好起来的。因此,我知道ctp.preset1应该根据ctp.range1中的计数保持范围1的百分比
在方程的这一部分中,如果使用整数,得到零的原因是:
(ctp.range1/(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
当整数数学截断时,对于有意义的范围计数,该值将始终计算为零。将其更改为:
(ctp.range1/double(ctp.range1+ctp.range2+ctp.range3+ctp.range4))
一切都会好起来。对不起,但我很确定你必须用英语问这个问题。现在不可能理解。请问,百分比是多少?@PawełStawarz;Hufff.。我尽了最大的努力。:)希望现在有意义。srroy忘了添加我的结构。对不起,但我很确定你必须用英语问这个问题。很好现在不可能理解。请告诉我什么的百分比。我尽了最大的努力。希望它现在能有意义。斯罗伊忘了添加我的结构。对不起,但我很确定你必须用英语问这个问题。现在不可能理解。请告诉我什么的百分比。我尽了最大的努力。呵呵我很抱歉,但我很确定你必须用英语问这个问题。现在不可能理解。什么的百分比,请?@PawełStawarz;Hufff.。我尽了最大的努力。:)希望它现在有意义。srroy忘了添加我的结构你怎么知道ctp.range1
不是float
?o_u__________________________________________________________________;谢谢。:)你怎么知道ctp.range1
不是float
?你说不管你怎么尝试都会得到零,所以你就不知道了。错了吗?Haccks,你没有给我们范围或预设的类型,但是范围=int和预设=double是最常见的,并且经常会导致你描述的麻烦。@Richard I你不认为Haccks是问这个问题的人吗?@remyabel;谢谢。:)你是怎么知道ctp的。range1
不是float
?因为你说不管你怎么做都会得到零。错了?Haccks,你没有给我们范围或预设的类型,但是range=int和pres