【问题标题】:Time converter is not working, giving me "could not convert string to float"时间转换器不工作,让我“无法将字符串转换为浮点数”
【发布时间】:2020-04-01 14:59:00
【问题描述】:

我正在尝试将时间从小时、分钟、秒转换为秒,但我不知道为什么会出现错误“无法将字符串转换为浮点数”

tmp1 = t.split('.')[0]
tmp2 = tmp1.split(':')
if len(tmp2)>1:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])
if len(tmp2)>2:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])

print(t, tmp1, tmp2, seconds)

02:38.0 02:38.0 ['02', '38'] 9482.0
02:28:28 02:28:28 ['02', '28', '28'] 8908.0
02:10.21 02:10 ['02', '10'] 7802.0

【问题讨论】:

  • t的值是多少?
  • @Błotosmętek t 是我喂它的时间,时间格式为 2:34:56 或 2:34.56
  • 依赖数据的问题应包括数据的最小示例。 - 什么是t?请阅读minimal reproducible example
  • 如果您使用的是具有调试功能的 IDE,那么现在也是开始学习如何使用这些功能的好时机。有时制作中间值而不是一条长线会有所帮助,因为您可以打印那些有助于故障排除的中间值。
  • t 可以同时具有'hh:mm:ss''hh:mm.ddd' 两种形式吗?其中'mm.ddd' 是小数分钟?

标签: python matplotlib


【解决方案1】:

如果执行了第一种形式,请不要尝试第二种形式:

if len(tmp2)>2:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])
elif len(tmp2)>1:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])

【讨论】:

    【解决方案2】:

    tmp1[1] 是字符串tmp1 的第二个字符。如果那是 : 或其他非数字,它将无法将其转换为浮点数。

    如果你的输入是2:34.56,那么你运行时tmp[1]就等于:

    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])
    

    您可能打算仅在不运行其他条件时才运行len(tmp2)>2 条件。一种解决方案是使用等于而不是大于。

    if len(tmp2) == 2:
        seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])    
    elif len(tmp2) == 3:
        seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])
    

    另一种选择是交换条件(正如@Błotosmętek 在他们的回答中所做的那样)。无论哪种方式,您都应该在第二个条件下使用elif(else if)而不是if,这样如果第一个条件已经运行,第二个条件就不会运行。

    【讨论】:

    • 如何解决?
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多