mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #1724 from h2so5/f2s-significand
preserve significands in float-string conversion
This commit is contained in:
+18
-1
@@ -143,8 +143,25 @@ mrb_flo_to_str(mrb_state *mrb, mrb_value flo)
|
||||
}
|
||||
|
||||
exp = (n > 1) ? floor(log10(n)) : -ceil(-log10(n));
|
||||
|
||||
/* preserve significands */
|
||||
int length = 0;
|
||||
if (exp < 0) {
|
||||
int i, beg = -1, end = 0;
|
||||
double f = n;
|
||||
double fd = 0;
|
||||
for (i = 0; i < FLO_MAX_DIGITS; ++i) {
|
||||
f = (f - fd) * 10.0;
|
||||
fd = floor(f + FLO_EPSILON);
|
||||
if (fd != 0) {
|
||||
if (beg < 0) beg = i;
|
||||
end = i + 1;
|
||||
}
|
||||
}
|
||||
if (beg >= 0) length = end - beg;
|
||||
}
|
||||
|
||||
if ((exp < 0 ? -exp : exp) >= FLO_MAX_DIGITS) {
|
||||
if (abs(exp) + length >= FLO_MAX_DIGITS) {
|
||||
/* exponent representation */
|
||||
e = TRUE;
|
||||
n = n / pow(10.0, exp);
|
||||
|
||||
Reference in New Issue
Block a user