#include <math.h>
#include <stdio.h>
#include <stdlib.h>
double round_to_n_digits_1(double x, int n)
{
double scale = pow(10.0, ceil(log10(fabs(x))) + n);
return round(x * scale) / scale;
}
double round_to_n_digits_2(double x, int n)
{
char buff[32];
sprintf(buff, "%.*g", n, x);
return atof(buff);
}
int main(void)
{
double x = 0.0501;
printf("%g\n", round_to_n_digits_1(x, 1));
printf("%g\n", round_to_n_digits_2(x, 1));
return 0;
}
I2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIApkb3VibGUgcm91bmRfdG9fbl9kaWdpdHNfMShkb3VibGUgeCwgaW50IG4pCnsgCiAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwgY2VpbChsb2cxMChmYWJzKHgpKSkgKyBuKTsKIAogICAgcmV0dXJuIHJvdW5kKHggKiBzY2FsZSkgLyBzY2FsZTsKfQogCmRvdWJsZSByb3VuZF90b19uX2RpZ2l0c18yKGRvdWJsZSB4LCBpbnQgbikKeyAKICAgIGNoYXIgYnVmZlszMl07CiAKICAgIHNwcmludGYoYnVmZiwgIiUuKmciLCBuLCB4KTsKIAogICAgcmV0dXJuIGF0b2YoYnVmZik7Cn0KIAppbnQgbWFpbih2b2lkKQp7CiAgICBkb3VibGUgeCA9IDAuMDUwMTsKICAgIAogICAgcHJpbnRmKCIlZ1xuIiwgcm91bmRfdG9fbl9kaWdpdHNfMSh4LCAxKSk7CiAgICBwcmludGYoIiVnXG4iLCByb3VuZF90b19uX2RpZ2l0c18yKHgsIDEpKTsKIAogICAgcmV0dXJuIDA7Cn0=