我必须打印一个浮点值,但是在编译时不知道精度。 所以这个参数必须作为文件传递。如何实现这一目标。 在Windows中,使用CString,格式化功能有助于实现此目的。 没有CString如何实现这一目标。 代码:
int main()
{
/* This below code segment works fine.*/
char str[80];
sprintf(str, "Value of Pi = %.3f", 3.147758);
std::cout << str << std::endl; //Prints "Value of Pi = 3.148"
/* When the precision may vary, henc It needs to be printed required on that.*/
char str2[80];
std::string temp = "%.3f"; //This is required as the precision may change.
// i.e I may have 4 instead 3 decimal points.
sprintf(str2, "Value = %s", temp, 3.148257);
std::cout << str2 << std::endl; //Prints "Value = <null>"
return 0;
}
答案 0 :(得分:4)
答案 1 :(得分:1)
您可以使用std::stringstream将float转换为std :: string。
如果你想使用sprint。而不是使用*
宽度。 Details here
答案 2 :(得分:1)
如果我理解你的问题,你可以使用setPrecision(..)来达到预期的结果:
#include <iostream>
#include <iomanip> // for setprecision()
int main()
{
using namespace std;
cout << setprecision(16); // show 16 digits
float fValue = 3.33333333333333333333333333333333333333f;
cout << fValue << endl;
double dValue = 3.3333333333333333333333333333333333333;
cout << dValue << endl;
}
答案 3 :(得分:0)
如果您可以使用iomanip,请执行以下操作:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int numOfDecimals = 2;// this controls precision. change to what ever you want
float PI = 3.147758;
cout << fixed << setprecision(numOfDecimals);
cout << PI << endl;
return 0;
}
答案 4 :(得分:0)
如果你想在运行中找到小数位数,你可以做类似下面的小数位数。这意味着您根本不必传递格式字符串。
#include <iostream>
using namespace std;
int main()
{
double dNum = 3.14159265359, threshold = 0.00000000005;
double temp = dNum;
int count = 0;
while((temp - (int)temp) > threshold)
{
temp *= 10;
threshold *=10;
count++;
}
char buffer[50];
sprintf(buffer,"value is = %.*f",count,dNum);
return 0;
}