I\'m trying to convert double/float numbers to string. Some of these numbers contain scientific notation \"e\", and I want to preserve it after the conversion. I searched throug
Your code is running fine. If you have crap values in the output maybe there is a stack corruption somewhere else.
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
template <typename T>
inline std::string ToString(T value) {
std::stringstream out;
out << std::fixed;
out << value;
return out.str();
}
int main() {
double mydouble = 1.7976931348623157e+308;
std::cout << boost::lexical_cast<std::string>(mydouble) << '\n';
std::cout << ToString(mydouble) << '\n';
}
Output:
1.7976931348623157e+308 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
As it was pointed out by Marcus in previous comments you don't want to use std::fixed.
Two things:
Fixed isn't what you want if you want scientific notation. It's the opposite.
when I compile
#include <iostream>
#include <sstream>
template <typename T>
inline std::string ToString(T value) {
std::stringstream out;
out << std::fixed;
out << value;
return out.str();
}
int main()
{
double mydouble = 1.7976931348623157e+308;
std::cout << ToString(mydouble) << std::endl;
}
I get
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
which is right, which means there's a bug in your C++ compiler or standard library.