#include <iostream>
#include <iomanip>
#include <limits>
#include <math.h>
#include <sstream>
using namespace std;
void test(double value)
{
int digits_before = 1 + (int)floor(log10(fabs(value)));
int digits_after = std::numeric_limits<double>::digits10 - digits_before;
double whole = floor(pow(10, digits_after) * fabs(value) + 0.5);
while (digits_after > 0 && (whole/10.0 - floor(whole/10.0)) < 0.05)
{
--digits_after;
whole = floor(whole / 10.0 + 0.5);
}
if (digits_after < 0) digits_after = 0;
std::stringstream ss;
ss << std::fixed << std::setprecision(digits_after) << value;
cout << ss.str() << endl;
}
int main() {
test(3.14);
test(3.14159);
test(1000);
test(1000.00000000001);
test(0.00001);
test(0.000000000000000000023);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHNzdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHRlc3QoZG91YmxlIHZhbHVlKQp7CiAgICBpbnQgZGlnaXRzX2JlZm9yZSA9IDEgKyAoaW50KWZsb29yKGxvZzEwKGZhYnModmFsdWUpKSk7CiAgICBpbnQgZGlnaXRzX2FmdGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpkaWdpdHMxMCAtIGRpZ2l0c19iZWZvcmU7CiAgICBkb3VibGUgd2hvbGUgPSBmbG9vcihwb3coMTAsIGRpZ2l0c19hZnRlcikgKiBmYWJzKHZhbHVlKSArIDAuNSk7CiAgICB3aGlsZSAoZGlnaXRzX2FmdGVyID4gMCAmJiAod2hvbGUvMTAuMCAtIGZsb29yKHdob2xlLzEwLjApKSA8IDAuMDUpCiAgICB7CiAgICAgICAgLS1kaWdpdHNfYWZ0ZXI7CiAgICAgICAgd2hvbGUgPSBmbG9vcih3aG9sZSAvIDEwLjAgKyAwLjUpOwogICAgfQogICAgaWYgKGRpZ2l0c19hZnRlciA8IDApIGRpZ2l0c19hZnRlciA9IDA7CiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKICAgIHNzIDw8IHN0ZDo6Zml4ZWQgPDwgc3RkOjpzZXRwcmVjaXNpb24oZGlnaXRzX2FmdGVyKSA8PCB2YWx1ZTsKICAgIGNvdXQgPDwgc3Muc3RyKCkgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7Cgl0ZXN0KDMuMTQpOwoJdGVzdCgzLjE0MTU5KTsKCXRlc3QoMTAwMCk7Cgl0ZXN0KDEwMDAuMDAwMDAwMDAwMDEpOwoJdGVzdCgwLjAwMDAxKTsKCXRlc3QoMC4wMDAwMDAwMDAwMDAwMDAwMDAwMjMpOwogICAgcmV0dXJuIDA7Cn0=