【问题标题】:Python convert string to float error with negative numbersPython将字符串转换为带有负数的浮点错误
【发布时间】:2020-01-22 01:34:01
【问题描述】:

如何将存储为字符串的负数转换为浮点数?

在 Python 3.6 上遇到此错误,不知道如何解决。

>>> s = '–1123.04'
>>> float(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '–1123.04'

【问题讨论】:

  • FWIW,您可以使用标准的unicodedata 模块来获取字符串中每个行为神秘的字符的名称。例如,如果字符串是s,则执行import unicodedata as ud print(*map(ud.name, s), sep=', ')。有关更多漂亮功能,请参阅模块文档。当然你也可以print(s.encode('unicode-escape'))

标签: python string python-3.x floating-point


【解决方案1】:

您的字符串包含 unicode 破折号,而不是 ASCII 连字符。你可以替换它:

>>> float('–1123.04'.replace('\U00002013', '-'))
-1123.04

【讨论】:

  • 如果你想显示不同之处,你可以把this扔进去,如果你愿意的话。
  • 你能解释一下你是如何看到确切的 unicode 类型的吗?我的破折号略有不同,想知道如何解决我的问题
  • @qwertylpc:请参阅 Pm 2Ring 对问题的评论。您还可以使用 .encode('unicode-escape') 来获得一个表示,该表示将为非 ASCII Unicode 字符使用反斜杠转义表示。
【解决方案2】:

对于更通用的解决方案,您可以使用正则表达式 (regex) 将所有非 ascii 字符替换为连字符。

import re

s = '–1123.04'

s = re.sub(r'[^\x00-\x7F]+','-', s)

s = float(s)

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多