#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 = 1234.56789;
printf("%.52g\n", round_to_n_digits_1(x, 6));
printf("%.52g\n", round_to_n_digits_2(x, 6));
return 0;
}
I2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIApkb3VibGUgcm91bmRfdG9fbl9kaWdpdHNfMShkb3VibGUgeCwgaW50IG4pCnsgCiAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwgY2VpbChsb2cxMChmYWJzKHgpKSkgKyBuKTsKIAogICAgcmV0dXJuIHJvdW5kKHggKiBzY2FsZSkgLyBzY2FsZTsKfQogCmRvdWJsZSByb3VuZF90b19uX2RpZ2l0c18yKGRvdWJsZSB4LCBpbnQgbikKeyAKICAgIGNoYXIgYnVmZlszMl07CiAKICAgIHNwcmludGYoYnVmZiwgIiUuKmciLCBuLCB4KTsKIAogICAgcmV0dXJuIGF0b2YoYnVmZik7Cn0KIAppbnQgbWFpbih2b2lkKQp7CiAgICBkb3VibGUgeCA9IDEyMzQuNTY3ODk7CiAgICAKICAgIHByaW50ZigiJS41MmdcbiIsIHJvdW5kX3RvX25fZGlnaXRzXzEoeCwgNikpOwogICAgcHJpbnRmKCIlLjUyZ1xuIiwgcm91bmRfdG9fbl9kaWdpdHNfMih4LCA2KSk7CiAKICAgIHJldHVybiAwOwp9