@@ -528,6 +528,15 @@ static bool arg_looks_numeric(mp_obj_t arg) {
528528 ;
529529}
530530
531+ static machine_int_t arg_as_int (mp_obj_t arg ) {
532+ #if MICROPY_ENABLE_FLOAT
533+ if (MP_OBJ_IS_TYPE (arg , & mp_type_float )) {
534+ return mp_obj_get_float (arg );
535+ }
536+ #endif
537+ return mp_obj_get_int (arg );
538+ }
539+
531540mp_obj_t str_format (uint n_args , const mp_obj_t * args ) {
532541 assert (MP_OBJ_IS_STR (args [0 ]));
533542
@@ -991,7 +1000,7 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, uint n_args, const mp_obj_t
9911000 case 'd' :
9921001 case 'i' :
9931002 case 'u' :
994- pfenv_print_int (& pfenv_vstr , mp_obj_get_int (arg ), 1 , 10 , 'a' , flags , fill , width );
1003+ pfenv_print_int (& pfenv_vstr , arg_as_int (arg ), 1 , 10 , 'a' , flags , fill , width );
9951004 break ;
9961005
9971006#if MICROPY_ENABLE_FLOAT
@@ -1009,7 +1018,7 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, uint n_args, const mp_obj_t
10091018 if (alt ) {
10101019 flags |= PF_FLAG_SHOW_PREFIX ;
10111020 }
1012- pfenv_print_int (& pfenv_vstr , mp_obj_get_int (arg ), 1 , 8 , 'a' , flags , fill , width );
1021+ pfenv_print_int (& pfenv_vstr , arg_as_int (arg ), 1 , 8 , 'a' , flags , fill , width );
10131022 break ;
10141023
10151024 case 'r' :
@@ -1034,14 +1043,14 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, uint n_args, const mp_obj_t
10341043 if (alt ) {
10351044 flags |= PF_FLAG_SHOW_PREFIX ;
10361045 }
1037- pfenv_print_int (& pfenv_vstr , mp_obj_get_int (arg ), 1 , 16 , 'a' , flags , fill , width );
1046+ pfenv_print_int (& pfenv_vstr , arg_as_int (arg ), 1 , 16 , 'a' , flags , fill , width );
10381047 break ;
10391048
10401049 case 'X' :
10411050 if (alt ) {
10421051 flags |= PF_FLAG_SHOW_PREFIX ;
10431052 }
1044- pfenv_print_int (& pfenv_vstr , mp_obj_get_int (arg ), 1 , 16 , 'A' , flags , fill , width );
1053+ pfenv_print_int (& pfenv_vstr , arg_as_int (arg ), 1 , 16 , 'A' , flags , fill , width );
10451054 break ;
10461055
10471056 default :
0 commit comments