格式为负毫秒

时间:2018-08-24 19:49:57

标签: python time

我有一个函数,可以将毫秒转换为h:m:s.ms格式,并且可以正常工作。

但是我有一个问题,那就是负数。

代码

def timer(ms):
    s = ms / 1000
    m, s = divmod(s, 60)
    h, m = divmod(m, 60)
    #d,h = divmod(h,24)
    d = ms % 1000

    if 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}".format(int(m), str(int(s)).zfill(2), str(int(d)).zfill(3))
    else:
        return "{0}.{1}".format(int(s), str(int(d)).zfill(3))


print(timer(13700)) 

# returns 13.700 as expected

-

当我给出负毫秒数时,例如-13700

print(timer(-13700))

它返回

59:46.300

但是我想要的预期输出是 -13.700

我该如何解决?

2 个答案:

答案 0 :(得分:4)

最简单的方法是检测负输入,获取其绝对值,然后在返回-时将它们放在前面:

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

答案 1 :(得分:1)

一种彻底解决此问题的好方法是:

  1. 确定标志
  2. 使用绝对值(abs)进行算术
  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