From c019d8d34d2db5de218802d923e6d0197a2ffca0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 26 May 2021 11:17:47 +0900 Subject: fmt_fp.c: move mruby specific `mrb_float_to_str` to `numeric.c` --- src/numeric.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/numeric.c') diff --git a/src/numeric.c b/src/numeric.c index 24160fb77..fe9995bd4 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -277,6 +277,30 @@ flo_div(mrb_state *mrb, mrb_value x) return mrb_float_value(mrb, a); } +MRB_API mrb_value +mrb_float_to_str(mrb_state *mrb, mrb_value flo) +{ + char buf[25]; +#ifdef MRB_USE_FLOAT32 + const int prec = 7; +#else + const int prec = 15; +#endif + + mrb_format_float(mrb_float(flo), buf, sizeof(buf), 'g', prec, '\0'); + for (char *p = buf; *p; p++) { + if (*p == '.') goto exit; + if (*p == 'e') { + memmove(p+2, p, strlen(p)+1); + memcpy(p, ".0", 2); + goto exit; + } + } + strcat(buf, ".0"); + exit: + return mrb_str_new_cstr(mrb, buf); +} + /* 15.2.9.3.16(x) */ /* * call-seq: -- cgit v1.2.3