Long double 没有提供所需的精度
Long double not giving the required precision
我正在读取一个文件,该文件的值以指数值的形式精确到 7 位数字
4.81591e-007
5.17968e-007
5.03954e-008
-8.30735e-007
虽然我得到的值只有 5 点精度
0.000000
0.000001
0.000000
-0.000001
-0.000002
代码如下,为
#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>
#include<map>
#include<cmath>
#include<sstream>
#include<string>
#include<queue>
#include<cstdlib>
#include<cstdio>
#include<fstream>
using namespace std;
int main()
{
FILE *fp2;
fp2=fopen("output","w");
int i=0;
ifstream myFile;
myFile.open("sruthi_DATA_.txt");
vector<long double>numberlist;
long double number;
while(myFile >> number){ //
numberlist.push_back(number);
i++;
}
int j;
for(j=0;j<i;j++)
{
cout.precision(10);
cout<<numberlist[j]<<fixed<<endl;
fprintf(fp2,"%Lf\n",numberlist[j]);
}
fclose(fp);
fclose(fp2);
return 0;
}
尝试将值打印为 fixed
http://www.cplusplus.com/reference/iomanip/setprecision/
http://www.cplusplus.com/reference/cstdio/printf/
std::cout << std::fixed << std::setprecision(10) << value << "\n";
定义:
fixed: the value is represented with exactly as many digits in
the decimal part as specified by the precision field
(precision) and with no exponent part.
scientific: as many decimal digits as the precision field
(precision). Finally, this notation always includes an
exponential part consisting on the letter e followed by
an optional sign and three exponential digits.
用于在 C 中打印:
fprintf(fp2, "%.10f\n", value);
格式说明符的定义是:
%[flags][width][.precision][length]specifier
Precision: For a, A, e, E, f and F specifiers: this is the number
of digits to be printed after the decimal point.
因此,要在 C++ 中实现与 C(%f) 相同的格式,您需要使用 std::fixed
.
如果您希望 fprintf
在点后打印十位数字,您必须在格式字符串中写入 %.10f
。 cout
的精度不影响 fprintf
.
并且你必须在数字之前将IO操纵器fixed
传递给cout
才能生效。否则你打印的第一个数字不会是固定的。
cout << fixed << numberlist[j] << endl;
要查看 C
中小数点后 5 位指数记数法(科学)中的数字,请使用 "%e"
。
fprintf(fp2,"%.5Le\n",numberlist[j]);
fprintf(fp2,"%.*Le\n", 5, numberlist[j]);
fprintf(fp2,"%.Le\n",numberlist[j]); // If not precision give, defaults to 6.
要在 Printf width specifier to maintain precision 中查看 FP 值,请使用
#include <float.h>
fprintf(fp2,"%.*Le\n", LDBL_DECIMAL_DIG - 1, numberlist[j]);
// or simply in hexadecimal notation
fprintf(fp2,"%.*La\n", numberlist[j]);
我正在读取一个文件,该文件的值以指数值的形式精确到 7 位数字
4.81591e-007
5.17968e-007
5.03954e-008
-8.30735e-007
虽然我得到的值只有 5 点精度
0.000000
0.000001
0.000000
-0.000001
-0.000002
代码如下,为
#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>
#include<map>
#include<cmath>
#include<sstream>
#include<string>
#include<queue>
#include<cstdlib>
#include<cstdio>
#include<fstream>
using namespace std;
int main()
{
FILE *fp2;
fp2=fopen("output","w");
int i=0;
ifstream myFile;
myFile.open("sruthi_DATA_.txt");
vector<long double>numberlist;
long double number;
while(myFile >> number){ //
numberlist.push_back(number);
i++;
}
int j;
for(j=0;j<i;j++)
{
cout.precision(10);
cout<<numberlist[j]<<fixed<<endl;
fprintf(fp2,"%Lf\n",numberlist[j]);
}
fclose(fp);
fclose(fp2);
return 0;
}
尝试将值打印为 fixed
http://www.cplusplus.com/reference/iomanip/setprecision/
http://www.cplusplus.com/reference/cstdio/printf/
std::cout << std::fixed << std::setprecision(10) << value << "\n";
定义:
fixed: the value is represented with exactly as many digits in
the decimal part as specified by the precision field
(precision) and with no exponent part.
scientific: as many decimal digits as the precision field
(precision). Finally, this notation always includes an
exponential part consisting on the letter e followed by
an optional sign and three exponential digits.
用于在 C 中打印:
fprintf(fp2, "%.10f\n", value);
格式说明符的定义是:
%[flags][width][.precision][length]specifier
Precision: For a, A, e, E, f and F specifiers: this is the number
of digits to be printed after the decimal point.
因此,要在 C++ 中实现与 C(%f) 相同的格式,您需要使用 std::fixed
.
如果您希望 fprintf
在点后打印十位数字,您必须在格式字符串中写入 %.10f
。 cout
的精度不影响 fprintf
.
并且你必须在数字之前将IO操纵器fixed
传递给cout
才能生效。否则你打印的第一个数字不会是固定的。
cout << fixed << numberlist[j] << endl;
要查看 C
中小数点后 5 位指数记数法(科学)中的数字,请使用 "%e"
。
fprintf(fp2,"%.5Le\n",numberlist[j]);
fprintf(fp2,"%.*Le\n", 5, numberlist[j]);
fprintf(fp2,"%.Le\n",numberlist[j]); // If not precision give, defaults to 6.
要在 Printf width specifier to maintain precision 中查看 FP 值,请使用
#include <float.h>
fprintf(fp2,"%.*Le\n", LDBL_DECIMAL_DIG - 1, numberlist[j]);
// or simply in hexadecimal notation
fprintf(fp2,"%.*La\n", numberlist[j]);