【问题标题】:How to convert a string containing "/" to a float in Python [duplicate]如何在Python中将包含“/”的字符串转换为浮点数[重复]
【发布时间】:2023-03-29 15:34:01
【问题描述】:

我有一些尺寸以英寸格式输入为文本,例如: text = "20 7/8 16 1/4" # 前两个代表长度,后两个代表宽度 我可以使用 text.split() 将此字符串更改为字符串列表以获取:[“20”、“7/8”、“16”、“1/4”]。

现在,我想将前两项相加 20 + 7/8 得到 20.875。如何将 7/8 转换为浮点数?

【问题讨论】:

  • 由于使用的是python3,所以可以使用eval:map(eval, ["20", "7/8", "16", "1/4"])
  • @pault 我真的很讨厌在任何地方看到eval:/
  • @roganjosh 我知道,但它在这里工作得很好。对 OP 的警告:Why is eval bad?
  • @pault 我猜它在很多地方都可以工作,直到......它工作得太好了:P
  • 感谢您的链接。

标签: python python-3.x type-conversion


【解决方案1】:

A quick Google search可以告诉你答案

from fractions import Fraction
print float(Fraction('7/8'))

【讨论】:

    【解决方案2】:
    >>> from __future__ import division
    ... 
    ... result = []
    ... text = "20 7/8 16 1/4"
    ... for num in text.split():
    ...     try:
    ...         numerator, denominator = (int(a) for a in num.split('/'))
    ...         result.append(numerator / denominator)
    ...     except ValueError:
    ...         result.append(int(num))
    ... 
    >>> result
    [20, 0.875, 16, 0.25]
    

    【讨论】:

    • python3 不需要from __future__ import division
    • @pault 你是对的。我刚刚在 PyCharm 中打开了一个 Python 2.7 项目,这就是我目前使用的控制台。有时我也喜欢使用operator.truediv 来实现 Python 2/3 兼容性,因为它非常明显。
    【解决方案3】:
    text = "7/8"
    x = text.find("/")
    numerator = float(text[0:x])
    denominator = float(text[x+1:])
    print(numerator/denominator)
    

    【讨论】:

    • 您的答案被标记为低质量,因为它缺乏解释。详细说明您的答案有效的原因,否则它将被删除。
    • 代码不言自明..取“/”左边的数,转换成float,取“/”右边的数,转换成float;然后执行正常除法!
    【解决方案4】:
    num = '7/8'.split('/')
    dec = int(num[0]) / int(num[1])
    

    【讨论】:

    • 是的,它会起作用的。
    【解决方案5】:

    如何将 7/8 转换为浮点数?

    a="7/8".split("/")
    a=int(a[0])/int(a[1])
    

    或者如果您不关心安全:

    a=eval("7/8")
    

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多