diff options
Diffstat (limited to 'src/numeric.c')
| -rw-r--r-- | src/numeric.c | 24 |
1 files changed, 24 insertions, 0 deletions
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: |
