summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c17
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
}