Skip to content

Commit fdaac1d

Browse files
committed
modbuiltins: round(): Accept second arg, and at least support it to be 0.
Per https://docs.python.org/3/library/functions.html#round, 2-args format guaranteedly returns float.
1 parent e178ef2 commit fdaac1d

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

py/modbuiltins.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,12 +465,20 @@ STATIC mp_obj_t mp_builtin_repr(mp_obj_t o_in) {
465465
}
466466
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_repr_obj, mp_builtin_repr);
467467

468-
STATIC mp_obj_t mp_builtin_round(mp_obj_t o_in) {
469-
// TODO support second arg
468+
STATIC mp_obj_t mp_builtin_round(mp_uint_t n_args, const mp_obj_t *args) {
469+
// TODO really support second arg
470+
mp_obj_t o_in = args[0];
470471
if (MP_OBJ_IS_INT(o_in)) {
471472
return o_in;
472473
}
473474
#if MICROPY_PY_BUILTINS_FLOAT
475+
mp_int_t num_dig = 0;
476+
if (n_args > 1) {
477+
num_dig = mp_obj_get_int(args[1]);
478+
if (num_dig > 0) {
479+
mp_not_implemented("round(..., N>0)");
480+
}
481+
}
474482
mp_float_t val = mp_obj_get_float(o_in);
475483
mp_float_t rounded = MICROPY_FLOAT_C_FUN(round)(val);
476484
mp_int_t r = rounded;
@@ -480,12 +488,15 @@ STATIC mp_obj_t mp_builtin_round(mp_obj_t o_in) {
480488
} else if (val - rounded == -0.5) {
481489
r &= ~1;
482490
}
491+
if (n_args > 1) {
492+
return mp_obj_new_float(r);
493+
}
483494
#else
484495
mp_int_t r = mp_obj_get_int(o_in);
485496
#endif
486497
return mp_obj_new_int(r);
487498
}
488-
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_round_obj, mp_builtin_round);
499+
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_round_obj, 1, 2, mp_builtin_round);
489500

490501
STATIC mp_obj_t mp_builtin_sum(mp_uint_t n_args, const mp_obj_t *args) {
491502
assert(1 <= n_args && n_args <= 2);

0 commit comments

Comments
 (0)