在C++中的ostream或fprintf中的意义
Significance in ostream or fprintf in C++
我正在尝试将输出文件转换为以下文件:
1.11111
11.1111
111.111
1111.11
111111
换句话说,我试图设置输出的重要性,而不是精度。我试过
oFile <<setprecision(6);
和
fprintf(oFile, "%6f", varName);
没有用。
非常感谢您的帮助。
干杯
编辑:很抱歉问题不完整。以下是一个最小、完整且可验证的示例:
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int main() {
ofstream oFile("output.dat");
float var1 = 10.9993;
float var2 = 11;
oFile << var1 << endl;
oFile << var2 << endl;
oFile << std::setprecision(6) << var2 - var1 <<endl; //10.9993 - 11 = -0.000699997
oFile.close();
/*
* output
* 10.9993
* 11
* 0.000699997
*/
FILE * oFile2;
oFile2 = fopen("output2.dat","w");
fprintf(oFile2, "%6f n%6f n%6f n",var1, var2, var2-var1);
fclose(oFile2);
/*
* output
* 10.999300
* 11.000000
* 0.000700
*/
}
因此,无论精度如何,我都希望在每种情况下最多有6个有效数字,即:
10.9993
11 or 11.0000 that does not matter
0.00070
好的,我已经把每个变量乘以小数点,减去,再除以小数点。这似乎奏效了。疯狂的是,C++中似乎没有设置重要性的功能。
我不能100%确定这是否是你所要求的,但我设法得到了的结果
1.11111
11.1111
111.111
1111.11
11111.1
111111
带有以下代码:
double test=1.11111;
for(int j=0;j<6;j++)
{
cout<<test<<endl;
test*=10;
}
这种情况下不需要iomanip或更改任何精度。
以下是设置双位数的代码,位数超过了您想要显示的位数,还有两种技术可以获得您想要的值。
#include <iostream>
#include <iomanip>
#include <stdio.h>
int main(){
double d[6] = { 1.1111123, 11.111123, 111.11123,
1111.1123, 11111.123, 111111.23 };
for( int i = 0; i < 6; i++ ){
std::cout << std::setprecision(6) << d[i] << std::endl;
}
for( int i = 0; i < 6; i++ ){
char buf[20];
sprintf( buf, "%6g", d[i] );
std::cout << buf << std::endl;
}
{
char buf[20];
sprintf( buf, "%6g", d[1]-d[0] );
std::cout << buf << std::endl;
}
}
可以改进,但它显示了基本成分。
稍后
d[0] = 10.9993;
d[1] = 11;
d[2] = d[1] - d[0];
for( int i = 0; i < 3; i++ ){
std::cout << std::setprecision(6) << d[i] << std::endl;
}
std::cout << std::setprecision(6) << d[1]-d[0] << std::endl;
for( int i = 0; i < 3; i++ ){
char buf[20];
sprintf( buf, "%6g", d[i] );
std::cout << buf << std::endl;
}
这会产生
10.9993
11
0.0007
0.0007
10.9993
11
0.0007
0.0007
相关文章:
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- fprintf 不打印到文件,当文件指针在其他地方声明时
- 为什么 ofstream 比 fprintf 慢?
- fprintf stdout 没有 100% 准确转储数据
- 使用 fprintf 连续写入字符串
- 我如何自定义fprintf以启用禁用
- 如何使用std :: fprintf()打印一个长字符串
- fprintf:打印文字十六进制字符串
- C4477: 'fprintf' :格式字符串 '%s' 需要类型为"char *"的参数,但可变参数 1 的类型为"int *"
- 编写自定义 FPrintF
- 打印带有 fprintf 的字符串
- C++ fprintf 只打印第一个字符串
- fprintf、字符串和矢量
- 用"fprintf"打印错误后调用"getchar()"有什么意义?
- dup2 : write() 重定向,但不是 fprintf() 或 puts()
- 从动态库(c++)调用fprintf
- 使用fprintf时的Nuances
- 如何使用 fprintf 打印头文件中定义的结构成员值?
- printf和fprintf的结果不同