如何更精确地打印浮点数?
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
所以我试图编写这个问题 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