printf — значение в ostream или fprintf в переполнении стека

Я пытаюсь получить вывод в файл, такой как этот:

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 ++.

-2

Решение

Я не уверен на 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 или изменении какой-либо точности для этого случая.

0

Другие решения

Вот код, который устанавливает двойные значения с большим количеством цифр, чем вы хотите отобразить, и двумя способами, чтобы получить то, что вы хотите.

#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
0

По вопросам рекламы [email protected]