Отформатировать негативные милисекунды

У меня есть функция, которая преобразует миллисекунды в формат h: m: s.ms, и она работает.

Однако у меня есть одна проблема, и речь идет о отрицательных числах.

код

Защита таймер ( мс ): 
    s = мс / 1000 
    м , с = divmod ( с , 60 ) 
    ч , м = divmod ( м , 60 ) # д, ч = divmod (Н, 24) 
    d = мс % 1000   
     

    если h > 0 : return "{0}: {1}: {2}. {3}" . format ( int ( h ), str ( int ( m )). zfill ( 2 ), str ( int ( s )). zfill ( 2 ), str ( int ( d )). zfill ( 3 )) elif m > 0 : return "{0}: {1}. {2}" . формат ( 
         
     
         int ( m ), str ( int ( s )). zfill ( 2 ), str ( int ( d )). zfill ( 3 )) else : return "{0}. {1}" . format ( int ( s ), str ( int ( d )). zfill ( 3 ))
    
         


печать ( таймер ( 13700 )) 

# возвращает 13.700, как ожидалось, py prettyprint prettyprinted ">print(timer(-13700))

-

Когда я даю отрицательные миллисекунды, например, -13700

59:46.300

он возвращается

-

но ожидаемый результат, который я хочу, составляет -13.700

Как я могу это решить?

python,time,

0

Ответов: 2


4 принят

Самый простой способ - обнаружить отрицательные входы, получить их абсолютные значения, а затем поставить -перед собой, когда вы их вернете:

def timer(ms):
    if ms < 0:
        return "-" + timer(abs(ms))
    ...

1

Хорошим подходом к чистому решению этого будет:

  1. определить знак
  2. используйте абсолютное значение (абс.) для арифметики
  3. добавить знак обратно к выходу

Поэтому изменение кода будет выглядеть так:

def timer(ms):
    sign = ms//abs(ms) if ms != 0 else 0 # <---  Step 1
    ms = abs(ms)                         # <---  Step 2
    s = ...
    ...        
    if sign == -1:                       # <---  Step 3
       output = "-"+output
    return output        
питон, время,