the*_*3RV -1 c++ precision double-precision
使用以下2个函数关注具有*注释的行.当cout <<语句执行时,没有显示小数位.3021680380/10000000变为302.而不是302.1680.
void convert(){
setprecision(4); //************************
newFileTime = new double[numRec]; //***********
newOffset = new int[numRec];
newSize = new int[numRec];
newNum = new int[numRec];
newType = new int[numRec];
newTime = new int[numRec];
for(int i = 0; i<numRec; i++){
newFileTime[i] = fileTime[i] / 10000000; //**********
newOffset[i] = offset[i] / 512;
newSize[i] = fileSize[i] / 512;
newNum[i] = 0;
if(type[i] == "Write"){
newType[i] = 0;
}else{
newType[i] = 1;
}
newTime[i] = responseTime[i] / 10000000;
}
}
void exports(){
setprecision(4); //**************
ofstream fout;
fout.open("prxy_0.ascii");
{
if(!fout){
cout <<"File opening failed. \n";
}
}
fout<< numRec <<endl;
for(int i = 0; i < numRec; i++){
fout<< newFileTime[i] << " " << newNum[i] << " " << newOffset[i] << " " << newSize[i] << " " << newType[i] << " " << newTime[i];
cout<< fileTime[i] << " " << newFileTime[i] <<endl; //**********
if(i != numRec - 1){
fout<<endl;
}
}
fout.close();
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
除非分割两个整数,否则此表达式的结果也是整数.整数除法总是向下舍入.
newFileTime[i] = fileTime[i] / 10000000;
// ^^^^^^^^^^^ ^^^^^^^^
// int int
Run Code Online (Sandbox Code Playgroud)
要解决你的表达,铸就一个操作数为double使部门的浮点除法(使用一个下列可能性):
newFileTime[i] = static_cast<double>(fileTime[i]) / 10000000;
// or
newFileTime[i] = fileTime[i] / 10000000.0;
Run Code Online (Sandbox Code Playgroud)
请注意,设置精度需要您将调用std::setprecision(...)放入要设置精度的流中.此外,这仅设置输出精度(写入流时),而不是如何执行计算:
std::cout << std::setprecision(4) << [some double values]
Run Code Online (Sandbox Code Playgroud)
另请注意,std::setprecision设置magnificant digets的数量而不是小数点后的小数.因此,您302.1680将被打印为302.2(四个巨大的数字).要在小数点后设置固定的位数,还要std::fixed在之前或之后写入流std::setprecision:
std::cout << std::fixed << std::setprecision(4) << [some double values]
Run Code Online (Sandbox Code Playgroud)
请注意,在程序运行期间将保留此类配置,直到您再次更改它们为止.要使它们在函数中保持本地,请确保在完成后恢复配置.
当然,std::cout只是一个示例性的流.这同样适用于写入文件(任何std::ostream对象).
| 归档时间: |
|
| 查看次数: |
5063 次 |
| 最近记录: |