diff --git a/src/common/sstream.c b/src/common/sstream.c index 336a65cb..b3122897 100644 --- a/src/common/sstream.c +++ b/src/common/sstream.c @@ -54,9 +54,9 @@ void c11_sbuf__write_f64(c11_sbuf* self, double val, int precision) { char b[32]; int size; if(precision < 0) { - size = snprintf(b, sizeof(b), "%.*g", 15, val); - if(strtod(b, NULL) != val) { - size = snprintf(b, sizeof(b), "%.*g", 17, val); + for(int g = 15; g <= 17; g++) { + size = snprintf(b, sizeof(b), "%.*g", g, val); + if(strtod(b, NULL) == val) break; } c11_sbuf__write_cstr(self, b); bool all_is_digit = true; diff --git a/tests/250_rfstring.py b/tests/250_rfstring.py index d2f93ed8..5381e053 100644 --- a/tests/250_rfstring.py +++ b/tests/250_rfstring.py @@ -65,6 +65,7 @@ assert f'{a:010.2f}' == '0000010.00' assert f'{a:.2f}' == '10.00' assert f'{a:.5f}' == '10.00000' assert f'{2.5:.0f}' == '2' +assert '{:.0f}'.format(2.5) == '2' b = '123' assert f'{b:10}' == '123 ' @@ -140,4 +141,10 @@ assert f'{A():10}' == 'A ' assert f'{A():10}' == 'A ' a = ['1', '2', '3'] -assert f'a = {'\n'.join(a)}' == 'a = 1\n2\n3' \ No newline at end of file +assert f'a = {'\n'.join(a)}' == 'a = 1\n2\n3' + +assert str(0.1+0.2) == '0.30000000000000004' +assert str(1/2) == '0.5' +assert str(1/3) == '0.3333333333333333' +assert str(1/4) == '0.25' +assert str(1/7) == '0.14285714285714285'