aboutsummaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorSebastian Plamauer2015-07-14 14:44:31 +0200
committerPaul Sokolovsky2015-07-19 21:49:44 +0300
commit1e8ca3a3cf442733f9210be4d5f6a5b63135a16d (patch)
tree04897c6ca646c4237af708227fad2616167d89c4 /py
parentab14c304931dfed22374a73ed62bd8ba8abb07d2 (diff)
modbuiltins: Implement round() to precision.
Diffstat (limited to 'py')
-rw-r--r--py/modbuiltins.c9
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);