diff options
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -954,15 +954,20 @@ rb_fix2str(x, base) VALUE x; int base; { - char fmt[4], buf[22]; + char fmt[4], buf[22], *b = buf; + long val = FIX2LONG(x); fmt[0] = '%'; fmt[1] = 'l'; fmt[3] = '\0'; if (base == 10) fmt[2] = 'd'; else if (base == 16) fmt[2] = 'x'; else if (base == 8) fmt[2] = 'o'; else rb_raise(rb_eArgError, "illegal radix %d", base); + if (val < 0) { + val = -val; + *b++ = '-'; + } - sprintf(buf, fmt, FIX2LONG(x)); + sprintf(b, fmt, val); return rb_str_new2(buf); } |