#include <iostream>
#include <iomanip>
#include <sstream>
#include <cmath>
size_t digits_before_point(double x)
{
return x ? size_t(std::max(0.0, floor(std::log(std::abs(x)) / std::log(10.0) + 1))) : 0;
}
std::string format(double x, size_t precision = 2)
{
std::ostringstream output;
output << std::setprecision(digits_before_point(x) + precision) << x;
return output.str();
}
int main()
{
std::cout << format(-123456.949) << std::endl;
std::cout << format(-123456.004) << std::endl;
std::cout << format(-123456.005) << std::endl;
std::cout << format(-123456.) << std::endl;
std::cout << format(0) << std::endl;
std::cout << format(0.9499) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxjbWF0aD4KCnNpemVfdCBkaWdpdHNfYmVmb3JlX3BvaW50KGRvdWJsZSB4KQp7CglyZXR1cm4geCA/IHNpemVfdChzdGQ6Om1heCgwLjAsIGZsb29yKHN0ZDo6bG9nKHN0ZDo6YWJzKHgpKSAvIHN0ZDo6bG9nKDEwLjApICsgMSkpKSA6IDA7Cn0KCnN0ZDo6c3RyaW5nIGZvcm1hdChkb3VibGUgeCwgc2l6ZV90IHByZWNpc2lvbiA9IDIpCnsKCXN0ZDo6b3N0cmluZ3N0cmVhbSBvdXRwdXQ7CglvdXRwdXQgPDwgc3RkOjpzZXRwcmVjaXNpb24oZGlnaXRzX2JlZm9yZV9wb2ludCh4KSArIHByZWNpc2lvbikgPDwgeDsKCXJldHVybiBvdXRwdXQuc3RyKCk7Cn0KCmludCBtYWluKCkKewoJc3RkOjpjb3V0IDw8IGZvcm1hdCgtMTIzNDU2Ljk0OSkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGZvcm1hdCgtMTIzNDU2LjAwNCkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGZvcm1hdCgtMTIzNDU2LjAwNSkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGZvcm1hdCgtMTIzNDU2LikgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGZvcm1hdCgwKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgZm9ybWF0KDAuOTQ5OSkgPDwgc3RkOjplbmRsOwp9