, - , :
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
std::string concise_and_accurate( double x, int prec ) {
std::stringstream strnum;
strnum << std::fixed << std::setprecision(prec) << x;
std::string str = strnum.str();
str.erase( str.find_last_not_of('0') + 1, std::string::npos );
if ( str[str.size()-1] == '.' ) str.erase(str.size()-1);
return str;
}
int main() {
double test[] = { 4357890.2342389, 1.0, 1.0/3, 100.0/3 };
for ( auto x : test ) {
std::cout << concise_and_accurate(x,6) << '\n';
}
return 0;
}
:
4357890.234239
1
0.333333
33.333333