diff options
Diffstat (limited to 'src/numeric.c')
| -rw-r--r-- | src/numeric.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/numeric.c b/src/numeric.c index 5e6f1b524..cef6fac96 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -40,8 +40,13 @@ mrb_to_flo(mrb_state *mrb, mrb_value val) return (mrb_float)mrb_integer(val); case MRB_TT_FLOAT: break; - default: + case MRB_TT_STRING: + case MRB_TT_FALSE: + case MRB_TT_TRUE: mrb_raise(mrb, E_TYPE_ERROR, "non float value"); + default: + val = mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f)); + break; } return mrb_float(val); } @@ -173,9 +178,15 @@ int_quo(mrb_state *mrb, mrb_value xv) if (y == 0) { int_zerodiv(mrb); } - return mrb_fixnum_value(mrb_fixnum(xv) / y); + return mrb_fixnum_value(mrb_integer(xv) / y); #else - return int_div(mrb, xv); + mrb_float y; + + mrb_get_args(mrb, "f", &y); + if (y == 0) { + int_zerodiv(mrb); + } + return mrb_float_value(mrb, mrb_integer(xv) / y); #endif } |
