diff options
| author | Sebastian Plamauer | 2015-07-14 14:44:31 +0200 |
|---|---|---|
| committer | Paul Sokolovsky | 2015-07-19 21:49:44 +0300 |
| commit | 1e8ca3a3cf442733f9210be4d5f6a5b63135a16d (patch) | |
| tree | 04897c6ca646c4237af708227fad2616167d89c4 /py | |
| parent | ab14c304931dfed22374a73ed62bd8ba8abb07d2 (diff) | |
modbuiltins: Implement round() to precision.
Diffstat (limited to 'py')
| -rw-r--r-- | py/modbuiltins.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/py/modbuiltins.c b/py/modbuiltins.c index 16b0e320c..d0c6130d5 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -431,7 +431,6 @@ STATIC mp_obj_t mp_builtin_repr(mp_obj_t o_in) { MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_repr_obj, mp_builtin_repr); STATIC mp_obj_t mp_builtin_round(mp_uint_t n_args, const mp_obj_t *args) { - // TODO really support second arg mp_obj_t o_in = args[0]; if (MP_OBJ_IS_INT(o_in)) { return o_in; @@ -440,9 +439,11 @@ STATIC mp_obj_t mp_builtin_round(mp_uint_t n_args, const mp_obj_t *args) { mp_int_t num_dig = 0; if (n_args > 1) { num_dig = mp_obj_get_int(args[1]); - if (num_dig > 0) { - mp_not_implemented("round(..., N>0)"); - } + mp_float_t val = mp_obj_get_float(o_in); + mp_float_t mult = MICROPY_FLOAT_C_FUN(pow)(10, num_dig); + // TODO may lead to overflow + mp_float_t rounded = MICROPY_FLOAT_C_FUN(round)(val * mult) / mult; + return mp_obj_new_float(rounded); } mp_float_t val = mp_obj_get_float(o_in); mp_float_t rounded = MICROPY_FLOAT_C_FUN(round)(val); |
