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

How can a floating-point number be printed with more precision?

所以我试图编写这个问题 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];
} 

您可以使用 std::cout << std::setprecision(std::numeric_limits<float>::max_digits10) 以 round-trippable 格式输出值。 (这将需要 headers <limits><iomanip>)。

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

您将要使用 iomanip

#inlcude <iomanip>

cout<<fixed<<setprecision(6)

fixed 将禁用科学记数法。

setprecision 将让您尽可能精确。

这解决了问题。 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