#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;
}