问题是我想输出Mathematica兼容的浮点数。标准IOStream或printf输出格式的唯一区别是指数e
被*^
替换:
Standard C/C++ output format: 1.23e-4
Mathematica format: 1.23*^-4
有没有办法操纵流来实现这种效果?我最初的想法是使用istringstream并将其转储为字符串,然后替换所有e
。如果有人发布代码来解析浮点数的位并直接输出它(即printf("%e")
替换),我也会没事的。
答案 0 :(得分:0)
你的想法应该很容易解决:
std::string FloatToStringMathematica(float x) {
std::stringstream a;
a << x;
std::string u = a.str();
size_t pos = u.find("e");
if(pos != std::string::npos) {
u.replace(p, 1, "*^");
}
return u;
}
答案 1 :(得分:0)
带有%f的printf根本不应该使用科学记数法。是否有一些原因你必须使用这种表示法,而不是简单地输出足够长的字符串以适合所有有效数字?
答案 2 :(得分:0)
这并没有像我们要求的那样使用流,但使用frexp()
对我有效:
#include <cmath>
#include <limits>
#include <iostream>
using namespace std;
// Print x for import to Mathematica
void cout_print(double x)
{
int exp;
cout << frexp( x, &exp );
if( exp ) cout << "*2^" << exp;
}
int main()
{
cout.precision(numeric_limits<double>::digits10);
cout_print(3.25); // 0.8125*2^2
}
这只是使用base-2指数而不是10表示数字。