如何更精确地打印浮点数?

时间:2018-12-19 06:19:10

标签: c++ floating-point double precision primitive-types

因此,我尝试对这个问题Link进行编码,然后我开发了逻辑并开始对其进行编码。该代码如下所示,但是存在问题。当我为代码提供以下输入(图像1)时,输出结果为2.22582e + 007,而正确的接受输出为22258199.500000。我应该对数据类型进行哪些更改以修正此错误。我该如何更改表示法。请耐心等待,因为我对数据类型的了解有限。

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main()
{
    int n,l;
    cin >> n;
    cin >> l;
    vector<float> v;
    vector<float> b;
    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        v.push_back(x);
    }
    sort(v.begin(),v.end());
    if(v[0]!=0){
        b.push_back(v[0]);
        for(int i=1; i<n; i++){
            b.push_back((v[i] - v[i-1])/2.0);
        }
    }else if(v[0] == 0){
        for(int i=1; i<n; i++){
            b.push_back((v[i] - v[i-1])/2.0);
        }
    }
    sort(b.begin(), b.end());
    cout << b[b.size()-1];
} 

Code output

3 个答案:

答案 0 :(得分:1)

您可以使用std::cout << std::setprecision(std::numeric_limits<float>::max_digits10)以可往返的格式输出值。 (这将需要标题<limits><iomanip>)。

如果这不起作用,请尝试将float替换为double

答案 1 :(得分:0)

您将要使用iomanip

#inlcude <iomanip>

cout<<fixed<<setprecision(6)

fixed将禁用科学计数法。

setprecision将使您尽可能精确。

答案 2 :(得分:0)

此问题已解决。 link 问题主要是输出的表示法是科学的,有时在线法官不接受这种表示法,因此,要将表示法从科学的改为固定的和其他形式,可以使用以下代码段。 您可以提高精度,也可以更改符号。后一种情况都可以提供帮助。

#include <iostream>
#include <sstream>

int main()
{
    std::cout << "The number 0.01 in fixed:      " << std::fixed << 0.01 << 
'\n'
              << "The number 0.01 in scientific: " << std::scientific << 
0.01 << '\n'
              << "The number 0.01 in hexfloat:   " << std::hexfloat << 0.01 
<< '\n'
              << "The number 0.01 in default:    " << std::defaultfloat << 
0.01 << '\n';
    double f;
    std::istringstream("0x1P-1022") >> std::hexfloat >> f;
    std::cout << "Parsing 0x1P-1022 as hex gives " << f << '\n';
}

output of the given code - click here